2013-03-13 184 views
2

我今天嘗試在我們的大項目中使用Windows 8和Visual Studio 2010。我收到來自某些項目的錯誤,聲明程序集System.Management,版本= 2.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a無法解析「,因爲它尚未預加載。使用ReflectionOnly API時,相關程序集必須預先通過ReflectionOnlyAssemblyResolve事件按需加載或加載。「編譯期間出現該錯誤。Windows 8 Visual Studio 2010編譯錯誤

我們不直接在我們的項目中引用此程序集。看來,也許Microsoft企業庫(版本5.0.414)使用此程序集。但爲什麼它不在那裏?我認爲它是.NET Framework的一部分。

該項目的TargetFramework是.NET 4.0

我能做些什麼來解決這個問題?

+0

[System.Management](http://msdn.microsoft.com/zh-cn/library/system.management(v = vs.100).aspx)絕對是.NET Framework的一部分。如果您在給出錯誤消息的項目中添加引用,錯誤是否會消失? – Malice 2013-03-13 18:36:27

+0

你可以刪除它,並嘗試重新添加它嗎?它可能需要一個新的版本,但讓我們知道如果這有效。 – 2013-03-14 00:26:20

回答

2

這毫無疑問是由Assembly.ReflectionOnlyLoad()引發的一個問題,沒有應用綁定策略。這可以防止2.0.0.0版本的System.Management.dll被映射到4.0.0.0版本。

你可以嘗試黑客自己的AppDomain.ReflectionOnlyAssemblyResolve事件處理程序,但這很難。無論如何,你最好採取這個問題的捷徑。進入控制面板,程序和功能,打開或關閉Windows功能。選中「.NET Framework 3.5」選項,確定並讓它暫時運行一段時間。

+0

安裝.NET 3.5就像你建議解決這個問題。 – SACO 2013-03-14 14:46:11

0

在我的Win8/VS 2012的機器與面向.NET FX 4的一個項目,我只被提供System.Management V4.0.0.0:

System.Management version on Windows 8

我猜測你的項目最初是爲.NET 2/3/3.5構建的,因此引用了System.Management v2.0.0。

我也猜測你的代碼使用某種形式的延遲加載和/或依賴注入/反轉控制容器(例如Ninject/Windsor/Autofac/Unity/StructureMap /等),並且你有包含對v2庫的引用的源代碼中的硬編碼字符串?

如果是這樣,那麼在構建.NET 4.0+時,需要更新對System.Management v4.0.0.0的引用。