3

私は今日、大きなプロジェクトのために Windows 8 と Visual Studio 2010 を使用しようとしました。一部のプロジェクトから、アセンブリ System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a がプリロードされていないため解決できないというエラーが表示されます。ReflectionOnly API を使用する場合、依存アセンブリはプリロードする必要があります。 -ReflectionOnlyAssemblyResolve イベントを通じてロードまたはオンデマンドでロードされます。" コンパイル中にエラーが表示されます。

プロジェクトでは、このアセンブリを直接参照しません。Microsoft Enterprise Library (バージョン 5.0.414) がこのアセンブリを使用しているようです。しかし、なぜそこにないのですか?.NET Framework の一部だと思いました。

プロジェクトの TargetFramework は .NET 4.0 です

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

2

これは、Assembly.ReflectionOnlyLoad()がバインディングポリシーを適用しないことによって引き起こされる問題であることは間違いありません。これにより、2.0.0.0バージョンのSystem.Management.dllが4.0.0.0バージョンにマップされなくなります。

独自のAppDomain.ReflectionOnlyAssemblyResolveイベントハンドラーをハッキングしてみることができますが、それはおかしなことです。この問題への近道をとったほうがいいです、とにかくすぐになります。[コントロールパネル]、[プログラムと機能]に移動し、Windowsの機能をオンまたはオフにします。[.NET Framework 3.5]オプションにチェックマークを付けて、[OK]をクリックし、しばらく待ちます。

于 2013-03-14T01:23:25.167 に答える
0

.NET FX 4 をターゲットとするプロジェクトを使用する Win8 / VS 2012 マシンでは、System.Management v4.0.0.0 のみが提供されます。

Windows 8 の System.Management バージョン

あなたのプロジェクトはもともと .NET 2/3/3.5 用にビルドされていたので、System.Management v2.0.0 を参照していると思います。

また、コードが何らかの形式の遅延読み込みおよび/または Dependency-Injection/Inversion-Of-Control コンテナー (Ninject / Windsor / Autofac / Unity / StructureMap / など) を使用していて、ハードコーディングされていることも推測しています。 v2 ライブラリへの参照を含むソースのどこかに文字列はありますか?

その場合、.NET 4.0+ 用にビルドするときに System.Management v4.0.0.0 への参照を更新する必要があります。

于 2013-03-14T00:22:03.843 に答える