1. ホーム
  2. c#

[解決済み] バージョン番号を自動でインクリメントする方法(Visual Studio)は?重複

2022-03-19 19:46:47

質問

ビルド時に自動インクリメントされる整数のセットを保存したい。

int MajorVersion = 0;
int MinorVersion = 1;
int Revision = 92;

コンパイルすると、自動でインクリメントされます。 Revision . セットアッププロジェクトをビルドするとき、それは MinorVersion (手動でやってもOKです)。 MajorVersion は手動でインクリメントするのみです。

そうすれば、メニューのHelp/Aboutにバージョン番号を表示して、ユーザーに伝えることができますね。

  バージョン:0.1.92

どうすれば実現できるのでしょうか?

この質問は、自動インクリメントのバージョン番号を持つ方法だけでなく、それをコードで使用する方法も尋ねており、他の回答よりも完全な回答になっています。

どのように解決するのですか?

を追加した場合 アセンブリ情報 クラスをプロジェクトに追加し AssemblyVersion 属性の末尾をアスタリスクにするなどしてください。

[assembly: AssemblyVersion("2.10.*")]

Visual Studio は、次のように最終的な数値をインクリメントします。 これらのルール (galetsさん、ありがとうございます。完全に間違ってました!)

このバージョンをコード内で参照し、ユーザーに表示するには 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つの重要なゴチャゴチャ

ash999より。

また、注目すべきは、もし両方の AssemblyVersionAssemblyFileVersion が指定されている場合は、.exeに表示されません。

BrainSlugs83さんより。

4番目の数字だけを設定することで * は、バージョンが常にインクリメントされないので、悪い影響を与える可能性があります。 3番目の数字は2000年からの日数です であり、かつ 4番目の数字は午前0時からの秒数(2で割ったもの) [IT IS NOT RANDOM] です。 . したがって、ある日の深夜にソリューションをビルドし、翌日の早朝にビルドした場合、後のビルドの方が早いバージョン番号を持つことになります。私は、常に X.Y.* の代わりに X.Y.Z.* なぜなら、この方法では必ずバージョン番号が増えるからです。

Visual Studioの新しいバージョンでは、このエラーが発生します。

<ブロッククオート

(2009年に始まったこのスレッド)

指定されたバージョン文字列は、決定論と互換性のないワイルドカードを含んでいます。バージョン文字列からワイルドカードを削除するか、このコンパイルで決定論を無効にしてください。

の方法については、このSOアンサーを参照してください。 決定論を排除する ( https://stackoverflow.com/a/58101474/1555612 )