1

を参照するC#コンソールアプリケーションがありますSybase.Data.AseClient

  • 開発マシンにはバージョン1.15.325バージョンのdllがあります
  • UATのバージョンは1.12.XYXZです
  • Prodのバージョンは1.15.115です

prodに似たマシンで以下の例外が発生します


エラー2010-11-1118: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)at Applicationname.ClassName.GetAseConnectionString(String connectionString)in -------------------------------- -------------------------------------------------- ---------

app.configでランタイムバインディングを構成し、実行時にこのリダイレクトを行うことを考えています。

これらのバージョンを動的にプラグインする他の方法/パターンはありますか?
私のアプローチはクリーンで提案されていますか?

4

3 に答える 3

1

これは、.configファイルで修正できる問題ではありません。それは、実際に手間のかかる作業を行うアンマネージコードの古いバージョンを見つけることです。名前はエラーメッセージsybdrvado115a.dllにあります。最初にc:\ windows\system32を調べます。

この例外を回避するには、そのマシンのSybaseプロバイダーを更新する必要があります。または、管理されたラッパーの古いバージョンをどこかで見つけます。アップグレードし、すべてのマシンを最新の状態にすることは、間違いなくより良いソリューションです。

于 2010-11-11T18:49:05.097 に答える
1

デフォルトでは、.NETは、そのバージョンでテストされていることを前提として、ビルドされたアセンブリのバージョンにバインドします。ランタイムバインディング構成を追加することにより、すべてが代替バージョンで機能することを確認したことを.NETに通知します。あなたは基本的に.NETに「私を信じてください。私が何をしているのか知っています」と言っています。これはあなたの状況にとって最も合理的なアプローチのように聞こえます。(アセンブリのバージョンを考慮せずにコードにDLLを動的にロードできる、より複雑な状況がありますが、プラグインや、アセンブリを事前に知らないその他の状況の場合はさらに複雑です。)

于 2010-11-11T18:44:06.087 に答える
0

DEVマシンをUATと同じにすることにしました。そのため、DEVマシンにあるSybaseプロバイダーのバージョンをダウングレードしました。UATとPRODは、システム担当者によって同じように作成されています。UATとPRODで実行できる機能のみを使用する透過的なDEV環境があるため、ランタイムアセンブリのロードよりも優れていると思います。下位バージョンのSybaseプロバイダーではダウンできないようなことは何もしていませんが、すべての環境に一貫性を持たせるのは安全です。

みんなありがとう。

于 2010-11-12T15:31:13.177 に答える