9

アプリのバージョニングを処理するためのより意味のある方法を見つけようとしていますが、このKB記事に出くわしました

http://support.microsoft.com/kb/556041

基本的には、アセンブリのバージョンを修正し、ビルドごとにファイルのバージョンを増やすことをお勧めします。今、これは私には完全に理にかなっていますが、私の一生の間、私はそれを実装することができないようです。

以下のスニペットは、アセンブリバージョンとファイルバージョンの両方を自動的にインクリメントします。

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

この次のものは、の固定アセンブリバージョン1.0.0.0との固定ファイルバージョンを設定しているようですが1.0.*

[assembly: AssemblyVersion("1.0")]
[assembly: AssemblyFileVersion("1.0.*")]

ちなみに、ファイルプロパティの[詳細]タブの[製品バージョン]も読み取ります1.0.*。これで、ファイルプロパティの製品バージョンを修正できます...

[assembly: AssemblyInformationalVersion("1.0")]

しかし、それは私の元のタスクには役立ちません。好奇心から以下を試してみたところ、ファイルのバージョンがに変わった2.0.*ので、少なくとも使っています。自動インクリメントではありません。

[assembly: AssemblyVersion("1.0")]
[assembly: AssemblyFileVersion("2.0.*")]

したがって、自動インクリメントされる唯一のバージョン番号を収集できるのはアセンブリバージョンですが、ファイルバージョンを指定していない場合は、アセンブリバージョンと同じに設定されます。

アセンブリバージョンを修正したまま、ファイルバージョンを自動インクリメントする方法を知っている人はいますか?

4

1 に答える 1

11

はい、それは少しばかげています、マイクロソフトはそれを間違った方法でやってきたようです。AssemblyVersionは.NETアセンブリバージョン管理システムで使用されるため、自動インクリメントしないでください。ただしAssemblyFileVersion、ファイルのバージョンリソースのファイルバージョンエントリに書き込まれるため、デフォルトでは常に自動インクリメントされると合理的に予想できます。

これを実行できるサードパーティのビルドシステムがいくつかあると確信していますが、それを実行するための小さなコマンドラインC#アプリを作成しただけで、ビルドプロセスの一部としてすべてのプロジェクトで実行されます。それは非常に簡単です:

  1. AssemblyInfo.csファイルを1行ずつ読み取ります。
  2. RegEx行を検索し、AssemblyFileVersion4つのバージョンパーツすべてを個別のキャプチャグループにキャプチャします。自分で解析することもできますが、正規表現はすべての検出と解析を一度に実行するため、利用しないのはばかげているようです。
  3. 4つの整数を取得したら、適切と思われる独自のインクリメントロジックを実装します。
于 2012-09-06T20:10:08.890 に答える