我有一个引用Sybase.Data.AseClient
的C#控制台应用程序。
我在类似于prod的机器上得到以下异常
ERROR 2010-11-11 18:18:23,562 15546ms FxSpotRateServer Main - 错误System.TypeInitializationException:'Sybase.Data.AseClient.AseConnection'的类型初始值设定项引发异常。 ---> Sybase.Data.AseClient.AseException:内部版本号不匹配 - sybdrvado115a.dll。期望内部版本号大于或等于'325'。已加载的内部版本号152。 在Sybase.Data.AseClient.AseConnection.CheckVersion() 在Sybase.Data.AseClient.AseConnection..cctor() ---内部异常堆栈跟踪结束--- 在Sybase.Data.AseClient.AseConnection..ctor(String connectionString) 在---------------------------------------中的Applicationname.ClassName.GetAseConnectionString(String connectionString) -------------------------------------------------- -
我正在考虑在app.config中配置运行时绑定,并在运行时执行此重定向。
是否有其他方式/模式动态插入这些版本?
我的方法是否清洁并建议?
答案 0 :(得分:1)
默认情况下,.NET会在假设已使用该版本进行测试的情况下绑定到它所构建的程序集的版本。通过添加运行时绑定配置,您告诉.NET您已经验证所有内容都适用于备用版本。你基本上告诉.NET,“相信我。我知道我在做什么。”这听起来像是对你的情况最合理的方法。 (有更复杂的情况,您可以在不考虑汇编版本的情况下动态加载代码中的DLL,但更多的是插件或其他您不了解程序集的情况。)
答案 1 :(得分:1)
这不是您可以使用.config文件修复的问题。它正在寻找一个旧版本的非托管代码,实际上是繁重的工作。该名称位于错误消息sybdrvado115a.dll中。我先看看c:\ windows \ system32。
您必须更新该计算机上的Sybase提供程序才能通过此异常。或者在某处找到旧版本的托管包装器。升级并让所有机器都是最新的,绝对是更好的解决方案。
答案 2 :(得分:0)
我决定将DEV机器与UAT相同,从而降级我在DEV机器上的Sybase提供程序版本。 UAT和PROD由系统人员制作。我认为它比运行时程序集加载更好,因为我们将拥有透明的DEV环境,人们只能使用它们可以在UAT和PROD中运行的功能。即使我没有采取任何措施,只能使用较低版本的Sybase提供程序,但使所有环境保持一致是安全的。
感谢每一个人。