Windows 8 Visual Studio 2010编译错误

问题描述:

我今天尝试在我们的大项目中使用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

这毫无疑问是由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

在我的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的引用。