2

我在使用 Firebird 数据库的 C# .NET 4.0 dll(使用存根/测试应用程序运行)时遇到了一个奇怪的问题。设置似乎是正确的,但是当 Firebird(我认为是 2.5.2)cli​​ent/dll/provider 需要抛出异常时,我总是得到以下信息:

失败:System.TypeLoadException:无法从程序集“mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”加载类型“System.Runtime.CompilerServices.ExtensionAttribute”。

因此,例如,如果我将连接字符串更改为不指向我的数据库文件,它将给出这个异常而不是更相关的东西。无论我是从 Visual Studio 2010 调试它还是手动运行 EXE,都会发生这种情况。

有另一个人在处理相同的代码,他没有这个问题,所以它似乎与代码无关。

有没有人见过或听说过这样的事情?不得不猜测异常试图告诉我什么变得令人沮丧。

更新: 所以看起来好像一切都是 x86,所以它看起来不像是位不匹配。而且我已经检查并再次检查了我是否拥有正确版本的提供程序(例如 NETProvider-3.0.2-Net40)。我仍然收到 TypeLoadException。

作为参考,以防它启发任何人,我正在运行 Windows XP 32 位。获得相关/实际异常的另一个人在 Windows 7(可能是 64 位)上。

4

3 回答 3

2

问题是您在 .NET 4 系统上使用 Firebird .NET 提供程序的 .NET 4.5 版本。Microsoft 将 .NET 4.5 进行了就地更新,将其保留为 4.0.0.0 版本,同时围绕诸如System.Runtime.CompilerServices.ExtensionAttribute能够在 .NETmscorlib中使用扩展方法之类的东西进行移动mscorlib。当 .NET 4.5 编译版本在 .NET 4 上运行时,它无法找到该类,因为它位于与预期不同的库中。

底线:确保NETProvider-3.0.2.0-NET40.7zhttp://www.firebirdsql.org/en/net-provider/安装 .NET 4 版本 ( )

此信息也在此博客中进行了描述。

于 2013-02-20T10:25:41.193 回答
0

尝试了不同的 firebug 提供程序版本,最后在服务器机器上将 .NET 更新到 4.5 对我有用。

.NET 4.5 下载: http: //go.microsoft.com/ ?linkid=9810134

于 2013-03-11T09:43:03.427 回答
0

当位数不匹配时,通常会出现此错误。确保您的 Firebird 驱动程序(以及下游的所有相关 DLL)和您的可执行文件都设置为相同的位数。

于 2013-02-19T23:28:52.390 回答