3

サーバー アプリケーションに対していくつかの操作を実行するコンソール ユーティリティを開発しました。私が使用しているサーバー アプリの性質上、サーバー上でこのユーティリティを実行する必要があります。

問題は、ユーティリティが以前にサーバーの GAC に展開された共通の DLL を参照していることです。共通 DLL の展開以来、それは更新されており、私のユーティリティはこれらの更新に依存しています。展開に関する会社のポリシーにより、GAC で DLL を更新できません。

デフォルトでは、ユーティリティは GAC の古い DLL を使用します。更新された DLL を強制的に使用する方法はありますか (たとえば、ファイル システムのパスを指定するなど)?

4

6 に答える 6

3

更新された DLL には新しいバージョン番号がありませんか? 参照で正しいバージョン番号を使用するように強制すると、ローカルのバージョン番号が取得されるはずです。

于 2009-02-23T16:01:12.950 に答える
3

残念ながら、GAC は切り札になる傾向がありますが、バージョンを変更した場合、(IDE で「特定のバージョン」を true に設定している限り) GAC の解決は失敗し、ローカル バージョンをロードできますか?

于 2009-02-23T16:01:54.227 に答える
2

Assembly クラスには、特定の場所からアセンブリを読み込むためのメソッドがいくつかあります。

Assembly.LoadFromいくつかのオーバーロードがあります

編集: 構成ファイルを介して、特定のアセンブリ バージョンを探す場所を指定する方法があります。正確には思い出せません。

于 2009-02-23T16:01:10.300 に答える
1

foson が示唆するように、コンソールの構成ファイルで codebase を使用してください。以下に例を示します (publicKeyToken、name、version、および href を適切に変更してください)。

<runtime> 
 <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
  <dependentAssembly> 
     <assemblyIdentity name="myCommonDll" publicKeyToken="32ab4ba45e0a69a1" culture="neutral" />
     <codeBase version="2.0.0.0" href="file://C:\Users\djpiter\Documents/myCommon.dll"/>
  </dependentAssembly> 
 </assemblyBinding> 
</runtime> 

したがって、これは CLR に共通の DLL への呼び出しを GAC から href の場所にあるバージョンにリダイレクトさせる最も簡単な方法です。更新された共通 dll は、名前、カルチャ、publickeytoken が同じで新しいバージョンの GAC のものと同じように、厳密な名前を付ける必要があります。したがって、唯一の変更はコンソールの構成ファイルにあります。コンソールのソース コードの参照を変更する必要はありません。既存のコンソール アプリをそのまま使用できます。

于 2011-12-08T22:00:56.873 に答える
0

<codebase>app.configの要素を使用してみてください

于 2009-02-23T16:09:35.223 に答える
0

AppDomain.AssemblyResolveイベントを確認することをお勧めします。

編集: イベントは、通常のアセンブリ解決が失敗した場合にのみ発生するため、ニーズに適合しません。

于 2009-02-23T16:00:31.300 に答える