2010-11-11 155 views
1

我有一个C#控制台应用程序,它引用Sybase.Data.AseClient内部版本号不匹配:Sybase ASE版本问题

  • 开发机具有版本1.15.325版本的DLL
  • UAT有版本1.12.XYXZ
  • PROD有版本1.15.115

我得到下面的异常类似于一台机器上PROD


ERROR 2010-11-11 18:18:23562个15546ms FxSpotR ateServer Main - Error System.TypeInitializationException:“Sybase.Data.AseClient.AseConnection”的类型初始值设定项引发异常。 ---> Sybase.Data.AseClient.AseException:内部版本号不匹配 - sybdrvado115a.dll。预计内部编号大于或等于'325'。在Sybase.Data.AseClient.AseConnection.CheckVersion()上装入内部版本号152. (位于Sybase.Data.AseClient.AseConnection..cctor()) ---内部异常堆栈跟踪结束--- 位于Sybase.Data .AseClient.AseConnection..ctor(String connectionString) at Applicationname.ClassName.GetAseConnectionString(String connectionString)in --------------------------- -------------------------------------------------- --------------

我想在我的app.config中配置运行时绑定,并在运行时执行此重定向。

是否有其他方式/模式来动态插入这些版本?
我的方法是否干净并建议?

+1

是否无法更新其他机器上的框架? – dexter 2010-11-11 18:45:19

回答

1

这不是您可以使用.config文件修复问题。它正在发现一个老版本的非托管代码,它实际上是在进行繁重的工作。该名称位于错误消息sybdrvado115a.dll中。我会先看看c:\ windows \ system32。

您将不得不更新该机器上的Sybase提供程序以避免此异常。或者在某处找到旧版本的托管包装。升级并让所有机器保持最新,绝对是更好的解决方案。

1

默认情况下,.NET会根据假设已经使用该版本进行测试,将其绑定到所创建程序集的版本。通过添加一个运行时绑定配置,你告诉.NET你已经验证了一切工作与替代版本。你基本上已经告诉.NET,“相信我,我知道我在做什么。”这听起来像是对你的情况最合理的方法。 (还有更复杂的情况,您可以在代码中动态加载DLL,而不考虑汇编版本,但这更适用于插件或其他您不知道汇编的情况。)

0

我决定让DEV机器与UAT相同,从而降级DEV机器上的Sybase提供程序的版本。 UAT和PROD由系统人员完成。我认为它优于运行时程序集加载,因为我们将拥有透明DEV环境,人们只会使用它们可以在UAT和PROD中运行的功能。尽管我没有采取任何措施,但是使用较低版本的Sybase提供程序却无法解决问题,因此保持所有环境的一致性是安全的。

感谢每一个。