我在使用 Firebird 数据库的 C# .NET 4.0 dll(使用 stub /测试应用程序运行)时遇到了一个奇怪的问题。设置似乎是正确的,但是当 Firebird(我认为是 2.5.2)客户端/dll/提供程序需要抛出异常时,我总是得到以下信息:
Failure: System.TypeLoadException : Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
因此,例如,如果我将连接字符串更改为不指向我的数据库文件,它将给出此异常,而不是更相关的异常。无论我是否从 Visual Studio 2010 调试它,还是手动运行 EXE,都会发生这种情况。
还有另一个人正在处理相同的代码,但他没有这个问题,因此它似乎与代码无关。
有人见过或听说过这样的事情吗?不得不猜测异常试图告诉我什么,这真是令人沮丧。
更新:所以看起来好像一切都是x86,所以它看起来不像是位不匹配。我已经检查并仔细检查过我是否拥有正确版本的提供程序(例如 NETProvider-3.0.2-Net40)。我仍然收到 TypeLoadException。
仅供引用,以防对任何人有所启发,我运行的是 Windows XP 32 位。另一个获得相关/真实异常的人使用的是 Windows 7(可能是 64 位)。
最佳答案
问题在于您在 .NET 4 系统上使用 .NET 4.5 版本的 Firebird .NET 提供程序。 Microsoft 对 .NET 4.5 进行了就地更新,保留其版本 4.0.0.0,同时将 System.Runtime.CompilerServices.ExtensionAttribute
等内容移至 mscorlib
能够使用 mscorlib
中的扩展方法。当 .NET 4.5 编译版本在 .NET 4 上运行时,它无法找到该类,因为它位于与预期不同的库中。
底线:确保安装 http://www.firebirdsql.org/en/net-provider/ 中的 .NET 4 版本 (NETProvider-3.0.2.0-NET40.7z
)
this blog 上也描述了此信息.
关于c# - 获取 TypeLoadException 而不是 Firebird DB 特定异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14969513/