【问题标题】:Windows 8 Visual Studio 2010 compilation errorWindows 8 Visual Studio 2010 编译错误
【发布时间】:2013-03-13 17:45:04
【问题描述】:

我今天尝试在我们的大型项目中使用 Windows 8 和 Visual Studio 2010。我从一些项目中收到错误,说明程序集 System.Management,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a 无法解析“因为它没有被预加载。使用 ReflectionOnly API 时,依赖程序集必须是 pre - 通过 ReflectionOnlyAssemblyResolve 事件按需加载或加载。”编译时出现错误。

我们不会在我们的项目中直接引用这个程序集。似乎 Microsoft 企业库(版本 5.0.414)可能使用此程序集。但为什么它不存在?我认为它是 .NET Framework 的一部分。

项目的TargetFramework是.NET 4.0

我能做些什么来解决这个问题?

【问题讨论】:

  • System.Management 绝对是 .NET Framework 的一部分。如果您在给出错误消息的任何项目中添加对它的引用,错误会消失吗?
  • 您可以删除它,然后尝试重新添加它吗?可能需要一个新版本,但如果可行,请告诉我们。

标签: .net visual-studio-2010 windows-8


【解决方案1】:

这无疑是由 Assembly.ReflectionOnlyLoad() 未应用绑定策略引起的问题。这可以防止 System.Management.dll 的 2.0.0.0 版本映射到 4.0.0.0 版本。

您可以尝试破解您自己的 AppDomain.ReflectionOnlyAssemblyResolve 事件处理程序,但这很糟糕。你最好走捷径解决这个问题,反正你很快就会了。进入控制面板,程序和功能,打开或关闭 Windows 功能。勾选“.NET Framework 3.5”选项,OK,让它滚动一会儿。

【讨论】:

    【解决方案2】:

    在我的 Win8 / VS 2012 机器上,我的项目针对 .NET FX 4,我只提供 System.Management v4.0.0.0:

    我猜您的项目最初是为 .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 的引用。

    【讨论】:

      猜你喜欢
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多