現在、実際の .NET アセンブリ名にコードのバージョン番号 (例: CodeName02.exe または CompanyName.CodeName02.dll) を含めるかどうかについて、社内で激しい議論が行われています。この問題に関するガイダンスを提供している Microsoft などの信頼できる情報源を知っている人はいますか?
9 に答える
これが、Properties/AssemblyInfo.cs ファイルの目的です。
そのファイルには、ファイル バージョンとアセンブリ バージョンの 2 つのバージョンがあります。
[assembly: AssemblyVersion("1.1.0.256"]
[assembly: AssemblyFileVersion("1.1.0.256")]
これらが設定されると、それらを使用してバイナリのバージョンを追跡できます。右クリック→プロパティでエクスプローラーで簡単に表示できます。
Microsoft のアプリケーション (および OS) に含まれる dll または exe の名前は、その規則を使用していません。
他のシステムは、これらの番号を使用して依存関係を解決し、バージョンを確認します。たとえば、MSI システムはバージョン プロパティに基づいてバイナリを更新します。
Microsoft のKrzysztof CwalinaとBrad AbramsによるFramework Design Guidelinesでは、次のようなアセンブリの命名を提案しています。
<Company>.<Component>.dll
GACおよびdllファイルのプロパティにバージョンが表示されるため、これをさらにサポートします(バージョン番号は使用しません)。
DevExpress Web サイトでは、XtraEditors8.2.dll などのアセンブリ名の一部としてバージョン インジケーターを使用していることを知っています。その理由は、アセンブリの複数のバージョンを同じディレクトリに配置できるようにしたいからだと思います。たとえば、同じシェル/クライアントの一部として配布されている約 15 のスマートクライアントがあります。各スマートクライアントは異なるバージョンの DevExpress コントロールを持つことができるため、XtraEditors7.1.dll と XtraEditors8.2 が同じディレクトリに存在する必要があります。
再利用可能なモジュールの依存関係であり、複数のバージョン 1.0、1.1、1.2 などに存在できる共通ライブラリがある場合、衝突を避けるためにバージョン番号を名前に含めることが有効な引数になると思います。共通ライブラリがGACに存在しないことを考えると。
信頼できるものは何も知りませんが、一貫した名前を使用すると、インストール スクリプトのプロセスから文書化までのすべてが簡素化されるように思えます。ファイルのメタデータとしてバージョンを保存できることを考えると、なぜファイル名に必要なのかわかりません。別の名前のファイルを説明する手間を自分で用意する必要はありません。
その点については、.NET フレームワークまたはその他のマイクロソフト製品を見てください。アセンブリ名の一部としてバージョン番号を入れるのは悪い考えのように思えます。
アセンブリのメタデータ セクションには、これ (およびその他の情報) の場所があります。(AssemblyInfo.cs)
この情報は、Windows エクスプローラーで表示できます (プロパティ ダイアログ、ステータス バー、ツールチップ - すべてこの情報が表示されます)。
DLL のファイル名にバージョン番号を入れるという主なアイデアは、 DLL Hellから引き継がれたものだと思います。ここでは、複数のバージョンの DLL があり、すべてが同じ名前で問題が発生していました (つまり、DLL の実際のバージョンはどれですか?必要な機能を備えているかなど)。
.NET Framework は、従来の C/C++ DLL ファイルとはまったく異なる依存関係を処理します。主に GAC は他のファイルにリンクする「偽の」フォルダーであるため、GAC にライブラリの複数のバージョンを含めることができます。ファイルシステム上で、アセンブリを実行可能インストールに含めることができることに加えて (同じフォルダーにデプロイするなど)。
Microsoft は 32 のサフィックスを使用して 32 ビット DLL バージョンを示し、それらの DLL が既存の 16 ビット DLL ファイルと共存できるようにしました。
バージョン情報は assemblyInfo ファイルに含めることができ、リフレクションなどを介して照会できます。
一部のベンダーは、名前にバージョン番号を含めて、一目でそれが何であるかを簡単に確認できるようにしています。Microsoft dll 名には、フレームワーク ディレクトリのバージョン番号が含まれていません。
バージョンはプロパティとして設定できるので、これは半冗長ではないでしょうか。
また、user32.dll、tcpmon.dll、winsock.dll などの DLL 名をざっと見てみると、MS には標準がないことをお勧めします。