目標のためにロードするべきではありません。Assembly.GetTypeとの反射を()を使用して、.NET 4.7コンソールアプリから 、私は国会Xからnetstandard 2.0クラスのタイプを抽出しようとしていますそして、私が欲しいですActivator.CreateInstance()を使用してこのTypeのインスタンスを作成します。は、netstandard、バージョン= 2.0.0.0「ファイルまたはアセンブリをロードできませんでした '...'。参照アセンブリが実行
私がやろうとしていること: しかし、このアセンブリXは、netstandard 2.0に依存しています。 Typeを取得できるようにするには、netstandard依存関係をAppDomainにロードする必要があります。
var netStandardDllPath = @"C:\Users\xxx\.nuget\packages\NETStandard.Library.2.0.0-preview1-25301-01\build\netstandard2.0\ref\netstandard.dll";
return Assembly.LoadFrom(netStandardDllPath);
スロー:
私が知っている何System.BadImageFormatExceptionを:「ファイルまたはアセンブリをロードできませんでしたAppDomainのは、に、AssemblyResolveイベントを通じてnetstandardアセンブリを要求しているとき、私は単純に、このようなDLLをロードする理由です 'file:/// C:\ Users \ vincent.lerouvillois.nuget \ packages \ NETStandard.Library.2.0.0 preview1-25301-01 \ build \ netstandard2.0 \ ref \ netstandard.dll' またはその依存関係。参照アセンブリは、実行のための ロードすべきではありません。彼らは唯一のリフレクション専用ローダー コンテキストでロードすることができます。 (HRESULTからの例外:0x80131058)」
内部例外:BadImageFormatExceptionは:実行するための参照 アセンブリを読み込むことができません。
: 私は、彼らは私たちがAssembly.ReflectionOnlyLoadFromでDLLをロードすることを知っています。しかし、そうすることで、Activator.CreateInstance()で型をインスタンス化できなくなります。 Microsoft official post
また、NugetパッケージNETStandard.Library 2.0.0-preview1-25301-01とNETStandard.Library.NETFramework 2.0.0-preview1-25305-02をコンソールアプリケーションで参照しようとしました。 netstandard 2.0ライブラリは参照されましたが、何も変更されませんでした。
質問:誰にも をエラーなしでそのDLLをロードするための適切な方法があるかどうかを知る、または多分これはバグである場合、またはでしょうしていますか?または、なぜこの種のdllが実行のためにロードできないのですか?
リファレンスアセンブリをロードすることは決してありません。これらのアセンブリは、プログラムのビルドにのみ適しています。これはAssemblyResolveイベントハンドラを記述したので間違っていました。キーは、CLRに、この型を含む実際のランタイムアセンブリを理解させることです。[この回避策](https://stackoverflow.com/a/19636730/17034)が.NETCoreでも機能します。 –