1

私たちは、独特でつらい状況に直面しています。従来、GAC とポリシー ファイルを使用して、.NET アプリケーションの DLL バージョンを制御してきました。ただし、非常に特殊な状況であり、一部のアプリケーションがポリシー ファイルを尊重しないため、これに関して大きな問題が発生しています。具体的には、ポリシー ファイルを持つ .NET 1.1 dll を参照する .NET 2.0 アプリケーションです。

Windows アプリケーションと多数の Web アプリケーションで動的に実行される (リフレクションを介して読み込まれる) 項目が混在しています。GAC のバージョン管理について心配するよりも、「集中型 DLL ストア」に移行することを検討しています。しかし、アプリケーションに「ここで DLL を探す」ように指示する方法が見つからないようです。

いくつかのアセンブリ情報ノード ( http://msdn.microsoft.com/en-us/library/twy1dw1e.aspx ) を見ると、途中までは取得できますが、ルックアップする必要があるすべての DLL をそれぞれ定義する必要があります。これは、共有 DLL のバージョンを更新する際に web.config を定期的に更新する必要がある約 200 の異なるアプリケーションがあるため、不可能です。

DLL 参照を移動する方法を知っている人はいますか? アプリケーションで新しいバージョンの共有 DLL を使用する必要がある場合があるため、CopyLocal はオプションではありません。少なくとも現時点では、GAC も実際にはオプションではありません。

4

1 に答える 1

1

app.configでCodeBaseヒントを使用できます。

<?xml version="1.0"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MyDll" />
        <codeBase version="1.0.1000.20000" href="file:///c:\SharedDlls" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Machine.Configファイル内でこれを使用する場合は、DLLに厳密な名前が必要です(GACの世界から来ており、Microsoft認定に必要な場合は、問題にはなりません)。

これは、MSDNブログのリンクで、より深いアドバイスを提供します。

于 2009-04-01T19:55:05.920 に答える