web-dev-qa-db-ja.com

.NET:AssemblyVersionAttributeの大きなリビジョン番号

ビルドを[メジャー]。[マイナー]。[マイクロ]。[リビジョン]としてバージョン管理するという慣習があります。例: 2.1.2.33546。

ビルドスクリプトは、以下を含むAssemblyInfo.csファイルを自動的に更新します

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

アセンブリにバージョン番号を埋め込むため。

しかし、Subversionリポジトリがリビジョン#65535に達したばかりで、ビルドが壊れました。

バージョン番号の各番号の最大値は65534であることがわかります(おそらくWindowsの制限によるものです)。

この問題に遭遇しましたか?良い解決策/回避策はありますか?

私たちはリビジョン番号を埋め込むスキームが好きで、明らかにSubversionサーバーをリセットすることはできません:-)

39
Rasmus Faber

もう少し背景情報:

ビルド番号が65535に制限されているのはなぜですか?

これが変更される可能性は低いため、オプションは次のとおりです。

  • リビジョンモジュロ65535を取得します。これは、1に戻ったことを意味します。
  • バージョン番号のマイクロフィールドを使用して、リビジョンを1000で割ってバージョン番号を分割します。つまり、バージョンは1.0.65.535になる可能性があります。
  • SVNリビジョンをAssemblyVersionに保存せず、代わりに AssemblyInformationalVersion に保存します。そうすれば、アプリケーションは表示目的で引き続きアクセスできますが、Windowsエクスプローラーを使用してSVNリビジョンをすばやく確認することはできなくなります。
  • SVNリビジョンをAssemblyVersionに保存せず、代わりにAssemblyProductまたはAssemblyDescriptionフィールドに保存します。この場合も、アプリケーションは引き続きアクセスできますが、エクスプローラーはプロパティシートに表示します。
43
Michael Stum

1つのオプションは、[AssemblyFileVersion]を使用することです。これでも警告が発生しますが、少なくとも次のようにビルドされます。

[Assembly: AssemblyFileVersion("1.0.0.80000")]
11
Marc Gravell

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

8

MSDNによる 、AssemblyVersionAttributeバージョン番号のコンポーネントはUInt16.MaxValue - 1に制限されていますアセンブリメタデータによるつまり、アセンブリにこれ以上の番号を格納することはできませんファイル。 Marc Gravellが示唆しているように、バージョン番号を読む人によっては、ファイルバージョンで十分な場合があります。

5
OregonGhost