2010-11-11 120 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提供程序卻無法解決問題,因此保持所有環境的一致性是安全的。

感謝每一個。