元のタイトル: .NET アプリからネイティブ dll が読み込まれないようにするにはどうすればよいですか?
バックグラウンド:
私の C# アプリケーションには、プラグイン フレームワークと汎用プラグイン ローダーが含まれています。
プラグイン ローダーは、プラグイン dll を識別するためにアプリケーション ディレクトリを列挙します (基本的に、この時点で *.dll を検索します)。
同じアプリケーション ディレクトリ内には、プラグイン dll の 1 つが間接的に依存するネイティブ (Windows、非 .net) dll があります。
プラグイン ローダーは、単純にファイル拡張子のみをチェックするため、native.dll が .NET アセンブリ dll であると盲目的に想定します。ネイティブ dll をロードしようとすると、例外がスローされます。
「ファイルまたはアセンブリ 'native.dll' またはその依存関係の 1 つを読み込めませんでした。モジュールにはアセンブリ マニフェストが含まれている必要がありました。」
基本的に、プラグインの読み込みに失敗した場合は診断レポートを作成するので、このログがネイティブ dll を読み込めないというメッセージでいっぱいになるのを避けようとしています (これは試したくありません)。
質問:
バイナリがたまたま .NET アセンブリであるかどうかを判断するために使用できる .NET API 呼び出しがあり、ネイティブ dll をまったくロードしようとしませんか?
おそらく長期的には、プラグインをサブディレクトリに移動する予定ですが、今のところは、プラグイン ローダー内に「native.dll」名をハードコーディングする必要のない回避策が必要です。
私は見落としていたある種の静的な Assembly.IsManaged() API 呼び出しを探していると思います....おそらくそのような API は存在しませんか?