「Assembly abc.dll のビルドに使用されたファイル X のバージョンは?」という質問に答えられるツールまたは手法が必要です。私は最近 .NET 開発グループに異動しましたが、この質問は何らかの形で常に出てくるようで、私たちはそれをうまく処理できません。誰かが「ねえ、最新のコードはテスト サーバーにありますか?」と言うでしょう。そして、答えは必然的に「わからない」のようなものです。
Unix 開発の昔 (私はここで私自身と付き合っています)、SCCS ソース管理システムには、ファイルに配置できる %I% (バージョン) や %M% (モジュール名) などの特別なキーワードがありました。ファイルがチェックアウトされるたびに、適切な SCCS バージョン情報に置き換えられます。したがって、ソース ファイルの "%I% %M%" に定数文字列を割り当て、コンパイルし、結果のライブラリでUnix "strings" コマンドを実行して、どのファイルのどのバージョンが使用されたかを判断するという巧妙な方法があります。そのファイルをビルドします。
次のように、C# クラス ファイルで独自にロールする簡単なテストを行いました。
public const String VERSION_STRING = "*VERSION* = MyClass 1.0";
次に、DLL ディレクトリで次のコマンド ラインを実行しました。
>for %f in (*.dll) do find "VERSION" %f
しかし、結果は次のとおりでした。
---------- MYASSEMBLY.DLL
VERSION_STRING
これは私が求めていたものとはまったく異なります(定数の名前はわかりましたが、クラスに手動で埋め込もうとしたバージョン情報はありませんでした)。
価値があるのは、現在、バージョン管理に Clearcase を使用していることです (現在、会社の標準です)。Clearcase には、ここで役立つツール ( clearauditなど) がいくつかありますが、それには、ビルド プロセスの改良とツールの再構築に向けた努力が必要です。また、Subversion への切り替えを試験的に検討していることにも触れておく必要があります。したがって、さまざまなバージョン管理システムまたはビルド環境 (MSBuild、NAnt、CruiseControl) のいずれかで .NET と連携するソリューションは、かなりのゲームだと思います。
どのファイルのどのバージョンがどのアセンブリに入ったかを追跡するための、特に.NET中心のソリューションは他にありますか?