3

アセンブリとリリースに関してベスト プラクティスと見なされるものは何ですか?

同じライブラリの複数のバージョンを参照できるようにしたいと考えています。ソリューションには、独自に構築した commonutils.dll ライブラリのさまざまなバージョンに依存する複数のプロジェクトが含まれています。

すべての依存関係が bin/debug または bin/release にコピーされるため、各 DLL ファイルのアセンブリ バージョン番号が異なっていても、そこには commonutils.dll のコピーが 1 つしか存在できません。

ライブラリの複数のバージョンを参照できるようにするには、アセンブリ名にバージョン番号を含める必要がありますか?それとも別の方法がありますか?

4

3 に答える 3

3

アセンブリは、同じ名前であってもバージョンが異なるため、GAC (グローバル アセンブリ キャッシュ) に共存できます。これは、.NET Framework に付属のアセンブリがどのように機能するかです。アセンブリが GAC 登録されるために満たす必要がある要件は、署名されることです。

アセンブリの名前にバージョン番号を追加すると、アセンブリ エコシステムの目的全体が無効になり、面倒です。特定のアセンブリのバージョンを知るには、[プロパティ] ウィンドウを開いてバージョンを確認します。

于 2008-09-18T15:19:48.157 に答える
1

これが私が生きてきたものです-

DLL ファイルを何に使用する予定かによって異なります。それらを 2 つの主なグループに分類します。

  1. 行き止まりのアセンブリ。これらは、どこからも参照する予定のない EXE ファイルと DLL ファイルです。これらに弱い名前を付けて、リリースするバージョン番号がソース管理でタグ付けされていることを確認してください。そうすれば、いつでもロールバックできます。

  2. 参照アセンブリ。これらに厳密な名前を付けて、他のアセンブリによって参照される複数のバージョンを持つことができるようにします。完全な名前を使用してそれらを参照します (Assembly.Load)。その最新かつ最高のバージョンのコピーを、他のコードが参照できる場所に保管してください。

次に、参照をローカルにコピーするかどうかを選択できます。基本的に、トレードオフは次のようになります。リファレンスからパッチ/アップグレードを取り入れたいですか? 新しい機能を取得することにはプラスの価値がありますが、一方で、重大な変更が発生する可能性があります。ここでの決定は、ケースバイケースで行うべきだと思います。

Visual Studio での開発中は、既定で最新バージョンを使用してコンパイルしますが、一度コンパイルすると、参照アセンブリにはコンパイルに使用された特定のバージョンが必要になります。

最後に決定するのは、ローカルにコピーするかどうかです。基本的に、参照されたアセンブリを配置するメカニズムが既にある場合は、これを false に設定します。

大規模なリリース管理システムを計画している場合は、おそらくこれについてさらに多くのことを考え、注意を払う必要があります。私(小さな店 - 二人)にとって、これはうまくいきます。私たちは何が起こっているかを知っており、意味のないことをしなければならないことを抑制されているとは感じません。

ランタイムに達したら、必要なものを Assembly.Load してアプリケーション ドメインに入れます。その後、Assembly.GetType を使用して目的の型に到達できます。複数の読み込まれたアセンブリ (同じプロジェクトの複数のバージョンなど) に存在する型がある場合、AmbiguousMatchException例外が発生する可能性があります。これを解決するには、静的な Assembly.GetType メソッドではなく、アセンブリ変数のインスタンスから型を取得する必要があります。

于 2008-09-18T15:27:54.220 に答える
0

異なるアセンブリ バージョンに異なる名前を付けるのが最も簡単な方法であり、確実に機能します。

アセンブリ (commonutils.dll) に厳密な名前が付いている (署名されている) 場合は、GAC にインストールすることを検討できます (グローバル アセンブリ キャッシュ - 同じアセンブリの異なるバージョンを GAC に並べてインストールできます)。したがって、.NET 型にはアセンブリのバージョン情報が含まれているため、呼び出し元のアプリケーションはそこから適切なバージョンを自動的に取得します。

VS プロジェクトでは、ライブラリの正しいバージョンを参照しますが、それをアプリケーション フォルダーにデプロイしません。代わりに GAC にインストールします (アプリケーションのセットアップ中)。

于 2008-09-18T15:24:53.290 に答える