2009-07-27 12 views
33

ビルドのバージョンを[メジャー]。[マイナー]。[リビジョン]としてバージョン管理するという慣習があります。 2.1.2.33546。.NET:AssemblyVersionAttributeの大きなリビジョン番号

当社のビルドスクリプトが自動的にアセンブリにバージョン番号を埋め込むために

[assembly: AssemblyVersion("x.y.z.w")] 

含むAssemblyInfo.csファイルを更新します。

しかし、私たちのSubversionリポジトリはリビジョン#65535に達しましたが、これは私たちのビルドを破ったものです。

バージョン番号の各数値の最大値は65534です(おそらくWindows制限のため)。

この問題が発生しましたか?良い解決策/回避策はありますか?

は、我々は、リビジョン番号を埋め込む手法が好きで

答えて

36

もう少し背景情報:

Why are build numbers limited to 65535?

これは変更を取得することはほとんどありませんと、あなたのオプションは次のとおりです。

  • は、あなたが戻って1にあることを意味リビジョンモデューロ65535を取ります
  • リビジョンを1000で割ってバージョン番号を分割するには、バージョン番号にMicro-Fieldを使用します。つまり、バージョンは1.0.65.535
  • SVNリビジョンをAssemblyVersionに保存するのではなく、AssemblyInformationalVersionに保存してください。この方法では、Windowsのエクスプローラを使用してSVNリビジョンを素早く確認することはできませんが、アプリケーションは表示目的でアプリケーションにアクセスできます。
  • SVNリビジョンをAssemblyVersionに保存せず、代わりにAssemblyProductまたはAssemblyDescriptionフィールドに保存します。再度、あなたのアプリケーションは引き続きそれにアクセスできますが、エクスプローラもこれをプロパティシートに表示します。
+5

AssemblyInformationalVerisonに配置すると、エクスプローラでプロパティ "Product Version"の下に表示されます。それは良い選択です。 – xagyg

9

一つの選択肢はただ[AssemblyFileVersion]を使用するかもしれません:-)我々は明らかに私たちのSubversionのサーバーをリセットすることはできません。これはまだ警告を発生させますが、それは、少なくとも、構築します:あなたは、より大きな格納することはできませんつまり、

[assembly: AssemblyFileVersion("1.0.0.80000")] 
+4

これは、msbuild(4.0)のそれ以降のバージョンで修正され、警告が表示されなくなりました。 – JoshSchlesinger

4

According to MSDN、AssemblyVersionAttributeバージョン番号のコンポーネントは、アセンブリメタデータによってUInt16.MaxValue - 1に限定されていますアセンブリファイル内の数値。 Marc Gravellの示唆しているように、ファイルバージョンは、あなたのバージョン番号を読む人に応じて、十分かもしれません。

6

同じ規約を使用することにしました。Windowsのバージョン番号の制限により、リビジョン番号を保持するために、バージョン番号の「マイクロ」部分を削除することを選択しました。私たちのバージョン番号は今や[major].[minor].[revision/10000].[revision % 10000]なので、リビジョン65535から構築されたアセンブリのバージョンは2.01.6.5535です。

+0

私は+1が好きです、どのようにAssemblyInfo.csに値を注入しますか? –

+9

これを行う場合、Windowsインストーラで「マイナーアップグレード」を使用しないようにしてください。完全なアンインストール/再インストールを避けるアップグレード)。 Windowsインストーラは4番目のバージョンのコンポーネントを完全に無視します。リリースを反映するために第3バージョンのコンポーネントを手動で更新しなくても、Windowsインストーラは特定のファイルの更新に失敗することがあります。 –

+2

@Ray Hayes:私たちのNAntビルドスクリプトは 'svn infoを使います。 --xml'を使用して作業コピーのリビジョン番号を取得し、そのリビジョンを[AssemblyVersion]属性を含む "SolutionInfo.cs"ファイルに出力するカスタム記述ユーティリティを呼び出します。このファイルはSubversionには追加されませんが、すべてのプロジェクトで参照されるだけです(VS内の「Add As Link」を使用)ので、すべて最新のバージョン番号でビルドされます。 –

関連する問題