3

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

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

4

2 回答 2

2

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

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

于 2013-03-14T01:23:25.167 回答
0

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

Windows 8 上的 System.Management 版本

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

于 2013-03-14T00:22:03.843 回答