編集
申し訳ありませんが、あなたの質問をもう一度読んだときに、あなたがプラグインを制御していないことを理解しています。
それを呼び出すアセンブリに基づいて、基盤アセンブリの使用を制限したい。
残念ながら、機密部分の呼び出しアセンブリをチェックする以外にそれを行う方法はありません。public static メンバーを避ける場合は、コンストラクターでチェックを行うことができます。
public class SensitiveClass {
private readonly byte[] SupplierXKey = new[] {...};
public SensitiveClass() {
var key = Assembly.CallingAssembly().GetName().GetPublicKey();
if (!key.SequenceEqual(SupplierXKey)) {
throw new SecurityException();
}
}
}
このソリューションでは、サプライヤがコードも保護する必要があることに注意してください。上記のコードを拡張して、呼び出し元の呼び出し元などを確認する必要がある場合があります。
古い間違った答え
プラグインのロードに MEF を使用していますか?
次に、特定のキーで署名されたアセンブリのみを許可する独自のカタログを作成できます。
何かのようなもの:
public class OnlyAssembliesFromX : ComposablePartCatalog
{
private readonly byte[] SupplierXKey = new[] {...};
AggregateCatalog _catalog = new AggregateCatalog();
public OnlyAssemblisFromX(string path) {
foreach (var file in Directory.GetFiles(path)) {
var key = AssemblyName.GetAssemblyName(file)
.GetPublicKey();
if (key.SequenceEqual(SupplierXKey)) {
_catalog.Catalogs.Add(new AssemblyCatalog(file));
}
}
}
public override IQueryable<ComposablePartDefinition> Parts {
get { return _aggregateCatalog.Parts; }
}
}