项目
版本

为什么框架的“旧版本”(如 System.Core 2.0.5.0)被引用?

Autofac(3.x 版本)是一个可移植类库(Portable Class Library,PCL),它针对多个平台进行了优化。

作为 PCL,如果你使用 Reflector、dotPeek 等工具打开 Autofac,你会看到对一些系统库(如 System.Core)2.0.5.0 版本的引用。实际上,2.0.5.0 版本是 Silverlight 版本的.NET 框架。这是预期的,并不是问题。 在运行时,所有东西都会正常工作。Autofac 将会正确绑定到你正在使用的框架版本——无论是.NET 4.5、Silverlight 还是 Windows Phone。关于 PCL,你可以参考 MSDN 上的更多内容。

在使用 Autofac 作为 PCL 时,你可能会遇到类似以下异常:

测试 'MyNamespace.MyFixture.MyTest' 失败:System.IO.FileLoadException: 无法加载文件或程序集 'System.Core, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes' 或其依赖项。给定的程序集名称或代码基无效。 (异常来自 HRESULT: 0x80131047)
    在 Autofac.Builder.RegistrationData..ctor(Service defaultService)
    在 Autofac.Builder.RegistrationBuilder`3..ctor(Service defaultService, TActivatorData activatorData, TRegistrationStyle style)
    在 Autofac.RegistrationExtensions.RegisterInstance[T](ContainerBuilder builder, T instance)
    MyProject\MyFixture.cs(49,0): 在 MyNamespace.MyFixture.MyTest()

请确保你的.NET 框架已更新。 Microsoft 已经发布了补丁来允许 PCL 正确找到合适的运行时环境(KB2468871)。如果你遇到上述异常(或其他类似错误),那意味着你缺少最新的.NET 框架补丁。

这篇博客文章对这些内容以及使用 PCL 时可能遇到的其他问题有很好的概述。

从 Autofac 4.x 开始,它不再支持 PCL,而是转向.NET Standard。你应该不会在 Autofac 4.x 及更高版本中看到这类错误。

在本文档中