113

アプリケーションのバージョンプロパティをビルドごとにインクリメントしたいのですが、Visual Studio(2005/2008)でこの機能を有効にする方法がわかりません。AssemblyVersionを1.0。*として指定しようとしましたが、希望どおりの結果が得られません。

また、設定ファイルを使用していますが、アセンブリバージョンが変更された以前の試行では、アプリケーションが別のディレクトリで設定ファイルを検索したため、設定がデフォルトにリセットされました。

バージョン番号を1.1.38の形式で表示できるようにしたいので、ユーザーが問題を見つけたときに、使用しているバージョンをログに記録し、古いリリースがある場合はアップグレードするように指示できます。

バージョン管理がどのように機能するかについての簡単な説明もいただければ幸いです。ビルド番号とリビジョン番号はいつインクリメントされますか?

4

8 に答える 8

97

「ビルトイン」のものでは、1.0。*または1.0.0。*を使用すると、リビジョン番号とビルド番号がコード化された日付/タイムスタンプに置き換えられるため、これはできません。これも通常は良い方法です。

詳細については、/vタグのアセンブリリンカーのドキュメントを参照してください。

自動的に数値をインクリメントする場合は、AssemblyInfoタスクを使用します。

AssemblyInfoタスク

これは、ビルド番号を自動的にインクリメントするように構成できます。

2つの落とし穴があります:

  1. バージョン文字列の4つの数字はそれぞれ65535に制限されています。これはWindowsの制限であり、修正される可能性はほとんどありません。
  2. Subversionでwithを使用するには、小さな変更が必要です。

その場合、バージョン番号の取得は非常に簡単です。

Version v = Assembly.GetExecutingAssembly().GetName().Version;
string About = string.Format(CultureInfo.InvariantCulture, @"YourApp Version {0}.{1}.{2} (r{3})", v.Major, v.Minor, v.Build, v.Revision);

そして、明確にするために:.netまたは少なくともC#では、ビルドは実際には3番目の番号であり、一部の人(たとえば、Major.Minor.Release.Buildに慣れているDelphi開発者)が期待する4番目の番号ではありません。

.netでは、Major.Minor.Build.Revisionです。

于 2008-08-03T11:41:38.490 に答える
21

VS.NETはデフォルトでアセンブリバージョンを1.0。*に設定し、自動インクリメント時に次のロジックを使用します。ビルド部分を2000年1月1日からの日数に設定し、リビジョン部分を深夜からの秒数に設定します。現地時間、2で割った値。このMSDNの記事を参照してください。

アセンブリバージョンは、assemblyinfo.vbまたはassemblyinfo.csファイルにあります。ファイルから:

' Version information for an assembly consists of the following four values:
'
'      Major Version
'      Minor Version 
'      Build Number
'      Revision
'
' You can specify all the values or you can default the Build and Revision Numbers 
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")> 

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 
于 2008-09-30T20:58:08.940 に答える
11

製品バージョンが必要な場合は、次を使用して最後のビルドの日付を表示するだけでうまく機能することがわかりました。

System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString("yyyy.MM.dd.HH.mm.ss")

次のようなものからバージョンを取得しようとするのではなく:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
object[] attributes = assembly.GetCustomAttributes(typeof(System.Reflection.AssemblyFileVersionAttribute), false);
object attribute = null;

if (attributes.Length > 0)
{
    attribute = attributes[0] as System.Reflection.AssemblyFileVersionAttribute;
}
于 2013-03-04T20:58:20.747 に答える
5

どのソース管理システムを使用していますか?

それらのほとんどすべてに、ファイルがチェックインされたときに展開される何らかの形式の$Id$タグがあります。

私は通常、何らかの形のハッカーを使用して、これをバージョン番号として表示します。

もう1つの方法は、日付をビルド番号として使用することです:080803-1448

于 2008-08-03T18:46:33.517 に答える
1

少し前に、アセンブリ情報のバージョン番号を更新する、すばやくダーティなexeを作成しました。{cs / vb}-rxfind.exe(シンプルで強力な正規表現ベースの検索置換ツール)を使用して、ビルドプロセスの一部としてコマンドラインから更新します。その他の役立つヒント:

  1. assemblyinfoを製品パーツ(会社名、バージョンなど)とアセンブリ固有のパーツ(アセンブリ名など)に分けます。こちらをご覧ください
  2. また、私はSubversionを使用しているので、ビルド番号をSubversionリビジョン番号に設定すると、アセンブリを生成したコードベースにいつでも簡単に戻ることができます(たとえば、1.4.100.1502はリビジョン1502からビルドされました)。
于 2008-08-04T19:51:49.610 に答える
0

コンパイルが完了するたびに更新される自動増分番号が必要な場合は、ビルド前のイベントからVersionUpdaterを使用できます。必要に応じて、ビルド前のイベントでビルド構成をチェックして、バージョン番号がリリース ビルドに対してのみインクリメントされるようにすることができます (たとえば)。

于 2010-02-28T21:16:35.570 に答える