2011-08-23 10 views
5

私はMSBuild Community Task libraryを使用して、現在のSVNバージョンを取得して、最終的にコンパイルされたDLLのリビジョンを取得するためのAssemblyInfoファイルを取得します。MSBuildコミュニティタスクライブラリを使用して.NET DLLのSVNバージョン番号を正しく設定する方法

あなたが知っているように、SVNバージョンは「28」や「28M」のようになります。 MSBuildメッセージを出力してRevisionプロパティを出力すると、変更後に28Mが得られますが、AsseblyInfoを更新すると、バージョン番号では28だけが取得されます。

私はバージョン番号にdllが非チェックインの変更を使って構築されていることを示すために28Mを持っています。私はそれをどのように働かせることができますか?

<Target Name="Compile"> 
<SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(SvnTool)"> 
    <Output TaskParameter="Revision" PropertyName="Revision" /> 
</SvnVersion> 

<ItemGroup> 
    <AssemblyInfoFiles Include="x.a\Properties\AssemblyInfo.cs" /> 
    <AssemblyInfoFiles Include="x.b\Properties\AssemblyInfo.cs" /> 
</ItemGroup> 

<FileUpdate Files="@(AssemblyInfoFiles)" 
      Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)" 
      ReplacementText="$(MajorVersion).$(MinorVersion).$(Revision).0" /> 

<MSBuild Projects="$(MSBuildProjectDirectory)\ConfigExplorer.sln" Targets="Rebuild" Properties="Configuration=$(BuildType);" /> 

+2

バージョンクラスでリビジョンが 'int'と宣言されているため、リビジョン番号として28Mを持つことはできません: 'public int Revision {get; } '。しかし、あなたは好きなテキストを保存する代わりに、例えばAssemblyInformationalVersionAttribute属性を使うことができます。 –

答えて

4

.NETアセンブリのバージョン番号が厳しく型付けされています。彼らは文字列だけではなく、最大65535という意味です(ドキュメントhttp://msdn.microsoft.com/en-us/library/cbf1574z.aspx参照)。 svnリビジョンを使用している場合(私が一度行ったように)、あなたのビルドはそのマジックナンバーを超えると壊れます。

私が使用したスキームデベロッパービルドとCIビルドの対応は、{year}.{month}.{day}.{build}という形式のバージョンを使用することでした。ここで、ビルド番号は追加のビルドパラメータで指定されていました。これにより、ビルドの日付が与えられ、開発者ビルドであるかどうかが示されました(最後のコンポーネントがゼロだった場合)

+0

あなたはSVNリビジョン番号の問題を指摘しました。@ Ririが別の方法でバージョン番号を生成することにした場合、おそらく彼/彼女はこの便利なhttp://archive.msdn.microsoft.com/AssemblyInfoTaskvers –

関連する問題