13

AssemblyVersionおよびAssemblyFileVersion属性は、.NET アセンブリのバージョン番号を処理する組み込みの方法です。フレームワークは、バージョン番号の最も重要でない部分 (Microsoft の用語ではビルドとリビジョン) を自動的に決定する機能を提供しますが、私はこの方法が非常に弱く、他にも多くの方法があることは間違いありません。

そこでお聞きしたいのですが、プロジェクトの実際のバージョンをより適切に反映するバージョン番号を得るために、どのような方法が決定されましたか? バージョンの一部を日付と時刻、またはプロジェクトの作業コピーのリポジトリ バージョンに設定するビルド前のスクリプトはありますか? フレームワークが提供する自動生成をそのまま使用しますか? または、他の何か?アセンブリ/ファイルのバージョン管理を管理する最良の方法は何ですか?

4

8 に答える 8

9

Subversion リビジョン番号をアセンブリ バージョンのコンポーネントとして使用することについて、ここで多くの投稿を目にします。注意: Windows (abcd) で利用可能な 4 つのバージョン番号は、それぞれ 16 ビット (最大 = 65535) に制限されています。Subversion のリビジョン番号は、特に同じリポジトリで複数のプロジェクトをホストしている場合、この制限を簡単に超える可能性があります。

于 2009-01-15T23:49:58.700 に答える
5

現在のプロジェクトでは、Subversion リビジョン番号をバージョン番号の最下位 (ビルド) 部分として使用し、Nant スクリプトを使用してプロジェクトの AssemblyInfo ファイルを作成します。AssemblyVersion 属性と AssemblyFileVersion 属性の両方に同じバージョン番号を使用します。(他の 3 つの部分は major.minor.point であり、major.minor はデータベース スキーマが変更されるたびに増加し、ポイントはリリースごとに増加します。)

ビルド番号を単純にインクリメントすることから始めましたが、ビルドごとにバージョン ファイルをチェックインする必要があり、マージ時に競合が発生しました。それがうまくいかないことが判明したとき、CruiseControl.NET を使用してビルド番号を生成し始めましたが、特定のビルドを手動で再現することは困難でした。最終的に、現在の (Subversion-revision) スキームに移行しました。

注: 残念ながら、.NET では、.NET コンパイラがコンパイル時に現在のタイムスタンプをオブジェクト ファイルにエンコードするため、過去のリビジョンからビルドを完全に再作成することはできません。同じコードをコンパイルするたびに、異なるオブジェクト ファイルが得られます。

于 2008-10-06T17:43:07.743 に答える
4

以前の仕事で Subversion を使用していたとき、ccnet に関する nant スクリプトを実行してリポジトリのバージョンを抽出し、それを最終的な番号として使用しました。

この仕事では、VSS (シャッター) を使用しているため、実際にはオプションではないため、次のガイドラインに従って手動で更新するポリシーがあります。

  • メジャー : 機能またはインターフェイスの大幅な (> 25%) 変更または追加。
  • マイナー : 機能またはインターフェイスの小さな変更または追加。
  • ビルド : インターフェイスを壊すマイナーな変更。
  • リビジョン: インターフェイスを変更しないビルドの修正。

また、アセンブリとファイルのバージョンを同期させます。アセンブリのバージョンはプログラムで簡単に読み取ることができ、ファイルのバージョンは Windows エクスプローラーの詳細モードで列として表示できます。

于 2008-10-06T17:23:17.317 に答える
3

私たちのビルド スクリプトは、変更セット番号を TFS からバージョンに挿入します。そうすれば、ビルドに含まれるチェックインを正確に知ることができます。

于 2008-10-06T17:17:52.303 に答える
3

CruiseControl.NET ビルド サーバーに perforce 変更リスト番号を埋め込みAssemblyFileVersionます。これにより、ビルド サーバーによってビルドされたアセンブリのソース コードを追跡できます。(常にメイン ブランチからビルドします。)

お客様が参照するアセンブリについては、AssemblyVersion重大な変更がない限り定数のままにします。その場合、バージョンをインクリメントして、お客様のコードが新しいバージョンに対して再構築されるようにします。

于 2009-01-15T23:02:45.707 に答える
2

Subversion のバージョン管理を使用し、ビルドスクリプトでアセンブリ バージョン情報を更新するため、ソース チェックインでバージョン管理を制御します。

于 2008-10-06T17:20:10.613 に答える
2

リリース (またはビルド) の日付をアセンブリに埋め込む傾向があります。たとえば、今日ビルドされた場合、バージョンは「2008.10.06」になります (ビルド スクリプトによって更新されます)。

于 2008-10-06T17:41:52.927 に答える
1

AssemblyVersionAttribute は、アセンブリの ID の一部です。これを変更すると、別のアセンブリであり、そのアセンブリにリンクするプログラムを再コンパイル/リンクするか、バージョン ポリシーを適用する必要があります。そのアピールが見つからなかったため、各修正プログラムの AssemblyFileVersion のみを増やし、各メジャー リリースの AssemblyVersion のみを変更することにしました。この決定により、win32 dll 地獄の一部が復活することは承知しています。ビルドごとに AssemblyFileVersion を増やし、バージョン管理システムにそのバージョンのラベル/タグを付けて、バイナリがどのソースから来たかを知るようにします。

于 2008-10-06T17:22:41.093 に答える