2012-12-18 11 views
11

私は1.5.4735.28467としてコンパイルされたバージョン番号1.5を持っているとします。「*」(ワイルドカード)バージョン番号の.NETの数式は何ですか?

4735と28467を得るための式は何ですか?

+1

、メジャー、マイナー、ビルド、リビジョン:


ここで式の一の実装は、(ダニエルさんのコメントから抽出されたもの)です。ビルドとリビジョンはあなた次第です。 –

+0

http://blogs.msdn.com/b/jensenh/archive/2005/11/11/491779.aspx。しかしそれはMicrosoft Officeのためだ。 .NET Frameworkの場合と同じように動作するかどうかはわかりません。 –

+7

ビルド= DateTime.Today.Subtract(新しいDateTime(2000、1、1))。リビジョン=(int)DateTime.Now.Subtract(DateTime.Today).TotalSeconds/2; これはひどいです。主張されている重複は別の質問です... – Daniel

答えて

18

ご注意:代替ツール/ルール/スキーム/マクロ/アドインがあるの/ etc異なる方法でバージョン管理を制御します。使用されている場合、明らかに以下のものを削除します。

しかし、これは"*"バージョンはバニラのVisual Studio/.NETのビルドプロセスに.build.revisionに計算する方法である。

バージョンを指定して、あなたは少なくとも主要指定する必要があります。メジャーとマイナーを指定する場合、はビルドのアスタリスク(*)を指定できます。これは、2

で割った、真夜中現地時間からの秒数に等しくなるように2000年1月1日現地時間以来、及び 改正のため日数に等しくなるようにビルドの原因となります

Coding Horror: Determining Build Date the hard wayおよびMSDN: AssemblyVersionAttributeを参照してください。このデフォルトの展開動作は、AssemblyVersionAttributeクラス(BCL!)に文書化されていますが、特別なVSコンパイラの動作(Danielのコメントを参照)ではなく、排他的なコンパイラの動作です。

int Build = DateTime.Today.Subtract(new DateTime(2000, 1, 1)).Days; 
int Revision = (int)DateTime.Now.Subtract(DateTime.Today).TotalSeconds/2; 
+3

これは間違いなくコンパイラの動作です。コンパイラはどのような属性もインスタンス化しません。引数値をメタデータにエンコードするだけです。しかし、その数はコンパイル時に代入されます。コンパイラの特殊なケースでなければなりません。似たようなことをするカスタム属性を書く方法はありません。 – Daniel

+0

@ダニエルそれは良い議論です。私は、バージョン番号の仕組みに関するVS(.NETではなく)リファレンスを見つけることができたらいいと思う。 –

+2

また、Roslynの実装を見ることもできます:http://source.roslyn.codeplex.com/#Microsoft.CodeAnalysis/VersionHelper.cs,95 – eug

関連する問題