8

我收到此错误 “无法从程序集'mscorlib,Version = 4.0.0.0,Culture = Neutral,PublicKeyToken = b77a5c561934e089'加载类型'System.Runtime.CompilerServices.ExtensionAttribute'。”

每当我将quartz.net 的dll 包含在我网站的bin 目录中并在代码中引用它时。我确信这与错误的 .net 框架有关。

我的 asp.net 站点正在使用目标框架 4.0 我正在使用 .net 4quartz.net 文件

并且我的 IIS 应用程序池(经典 .net 池)设置为运行 .net 4.0 frework。

我不知道从哪里开始,但我确定的是移除 Quartz,我看起来又好了(减去调度)

4

3 回答 3

6

在 C# 中使用扩展方法需要ExtensionAttribute类。在 .NET Framework 4.0 中,该类位于程序集 System.Core.dll 中,但在 .NET Framework 4.5 中,该类已移至 mscorlib.dll。我猜这个问题是,Quartz.dll(或其他程序集)是在安装了 .NET Framework 4.5 的计算机上编译的,因此在 mscorlib.dll 中期望 ExtensionAttribute,而这在只有 .NET Framework 4.0 的计算机上不存在。

我相信在没有 .NET Framework 4.5 的计算机上重新编译 Quartz 应该可以解决问题。在带有 IIS 的服务器上安装 .NET Framework 4.5 也应该有所帮助,但我不推荐它,因为它仍处于测试阶段。

于 2012-04-13T19:38:20.097 回答
5

这是最终版本中引入的一个问题,因为 Quartz.Net 是针对 4.5 框架编译的。看看这个问题被报告的线程。有一个固定版本的 dll 可用。

于 2012-04-13T20:17:45.430 回答
1

您是否尝试过添加对 mscorlib 程序集的引用并将 Copy Local 设置为true

在这里阅读:

此问题与 ILMerge.exe 的运行方式有关。类型转发(在这种情况下是 ExtensionAttribute 类型)被认为是非破坏性更改,因为它在支持的场景中对运行时以及我们的编译器是透明的。编译器或类似编译器的工具(ILMerge 就是其中之一)应该支持类型转发,就像它们应该支持运行时的其他特性一样。此外,运行编译器的受支持方式是显式且完全地引用适当多目标包的参考程序集。

于 2012-04-13T10:49:32.747 回答