ビルド時に自動的に増分される整数のセットを保存したい:
int MajorVersion = 0;
int MinorVersion = 1;
int Revision = 92;
コンパイルすると、自動的に増分されますRevision
。セットアップ プロジェクトをビルドすると、増分されますMinorVersion
(手動で行ってもかまいません)。MajorVersion
手動でのみ増分されます。
次に、メニューのヘルプ/バージョン情報にバージョン番号を次のように表示します。
バージョン: 0.1.92
これを実現するにはどうすればよいでしょうか?
この質問では、自動的に増加するバージョン番号を取得する方法だけでなく、それをコード内で使用する方法も尋ねており、他の質問よりも完全な回答となっています。
ベストアンサー1
追加するとアセンブリ情報クラスをプロジェクトに追加し、AssemblyVersion
属性がアスタリスクで終わるように修正します。例:
[assembly: AssemblyVersion("2.10.*")]
Visual Studioは、最終的な数値を次のように増加させます。これらのルール(ありがとう、ガレット。完全に間違っていました!)
このバージョンをコード内で参照してユーザーに表示するには、 を使用しますreflection
。たとえば、
Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
DateTime buildDate = new DateTime(2000, 1, 1)
.AddDays(version.Build).AddSeconds(version.Revision * 2);
string displayableVersion = $"{version} ({buildDate})";
知っておくべき3つの重要なポイント
@ashes999 より:
AssemblyVersion
また、と の両方AssemblyFileVersion
が指定されている場合は、.exe にこれが表示されないことにも注意してください。
@BrainSlugs83 より:
4 番目の数字だけを に設定するのは*
、バージョンが常に増加するとは限らないため、よくない場合があります。3番目の数字は 2000 年からの日数で、4 番目の数字は深夜からの秒数 (2 で割った値) です [ランダムではありません]X.Y.*
。そのため、ある日の遅い時間にソリューションをビルドし、次の日の早い時間にビルドした場合、後のビルドのバージョン番号はより前になります。この方法ではバージョン番号が常に増加するため、 ではなく を常に使用することをお勧めしますX.Y.Z.*
。
Visual Studio の新しいバージョンでは次のエラーが発生します:
(このスレッドは2009年に開始されました)
指定されたバージョン文字列には、決定論と互換性のないワイルドカードが含まれています。バージョン文字列からワイルドカードを削除するか、このコンパイルの決定論を無効にしてください。
方法を説明したSOの回答を参照してください決定論を排除する(https://stackoverflow.com/a/58101474/1555612)