SVN作業コピーのリビジョン番号をVersionInfoに取得します。cs
-
13-11-2019 - |
質問
SLN内のすべてのプロジェクトはVersionInfoを共有しています。プロジェクトのバージョン番号を保持するcs
[assembly: AssemblyVersion("0.0.1.0")]
[assembly: AssemblyFileVersion("0.0.1.0")]
バージョン番号の最初の3つの部分と、作業コピー SVNリビジョンにしたい最後の部分を静的に定義したいと思います。
ステップ番号1は、cmdスクリプトをトリガーするVSでビルド前イベントを定義することです。cmdから作業コピーのリビジョンを取得する簡単な方法はありますか?
ステップ2は、その番号をVersionInfoに挿入することです。csファイル
これを行うには、おそらくよりエレガントな方法がありますが、これがオープンソースプロジェクトであり、派手なビルドサーバーなどがないことに注意し展開手順は、プロジェクトをリリースモードにしてビルドするだけです:D
解決 3
HMJD:Sソリューションは、バージョンファイルを参照しているすべてのプロジェクトを構築するたびにファイルに書き込んだ場合は、そこに書き込まれた場合、バージョンファイルを再構築する必要がある場合は、スクリプトを変更してファイルに書き込むだけのスクリプトが変更されました。新しいリビジョン番号
@ECHO off
FOR /F "tokens=1,2 delims=:M" %%A in ('svnversion ../ -c') do SET PART_1=%%A&SET PART_2=%%B
SET file=../VersionInfo.cs
IF NOT DEFINED PART_2 (
SET SVN_REV=%PART_1%
)
IF NOT DEFINED SVN_REV (
SET SVN_REV=%PART_2%
)
set result=0
for /f "tokens=3" %%f in ('find /c /i ".%SVN_REV%." %file%') do set result=%%f
IF %result% gtr 0 (
GOTO end
)
ECHO using System.Reflection; > %file%
ECHO [assembly: AssemblyVersion("0.1.%SVN_REV%.0")] >> %file%
ECHO [assembly: AssemblyFileVersion("0.1.%SVN_REV%.0")] >> %file%
:end
. 他のヒント
CMDから作業コピーのリビジョンを取得する簡単な方法はありますか?
標準出力にリビジョンを印刷する
svnversion.exe
という実行可能ファイルがあります。これを確実にPATH
にあることを確認した場合は、これを呼び出すことができます。その番号をversionInfo.csファイルに挿入するには
バッチファイルから、
VesionInfo.cs
ファイルを完全に、または部分的に生成することができます。.@echo off FOR /F %%A in ('svnversion') do SET SVN_REV=%%A echo [assembly: AssemblyVersion("0.0.1.%SVN_REV%")] > VersionInfo.cs echo [assembly: AssemblyFileVersion("0.0.1.%SVN_REV%")] >> VersionInfo.cs
編集:
更新されたバッチファイルの更新
RR
、NN:RR
およびNN:RRM
のリビジョン番号に対処するNN
は整数でRR
がリビジョン:.@ECHO off FOR /F "tokens=1,2 delims=:M" %%A in ('svnversion') do SET PART_1=%%A&SET PART_2=%%B IF NOT DEFINED PART_2 ( SET SVN_REV=%PART_1% ) IF NOT DEFINED SVN_REV ( SET SVN_REV=%PART_2% ) ECHO [assembly: AssemblyVersion("0.0.1.%SVN_REV%")] > VersionInfo.cs ECHO [assembly: AssemblyFileVersion("0.0.1.%SVN_REV%")] >> VersionInfo.cs
- まVisualStudioでは、サウナ、スチームルーム
の場合はフォルトのフォルダを使用すSubWCRevからTortoiseSVN
- 書テンプレートのVersionInfo.csへのリポジトリではなく最終ファイルが変更一部のデータ交換による適正)SubWCRev-キーワード
- 毎ビルド処理実行SubWCRev、書最終ファイルを実際のデータからのテンプレート、WC-データ(全ビルダーできる/開始/していな
svn export
+subwcrev wc-path VersionInfo.cs.tpl VersionInfo.cs
)
ダウンロード MSBuildコミュニティタスク そしてそれをインストールします。
あなたを開きます。csprojと最後に(閉鎖前 </project>
タグ)
次のコードを貼り付けます(変更しないでください <Import>
タグ):
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
の後に <Import>
次のタグを貼り付けます:
<Target Name="BeforeBuild">
<SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(ProgramFiles)\TortoiseSVN\bin">
<Output TaskParameter="Revision" PropertyName="Revision" />
</SvnVersion>
<FileUpdate Files="Properties\AssemblyInfo.cs" Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)" ReplacementText="$1.$2.$3.$(Revision)" />
</Target>
属性を見てください ツールパス SvnVersionタグの中には、マシン内の場所を特定する必要があります。 svnバージョン。exe バイナリファイル。
TortoiseSVNソフトウェアがインストールされていると仮定すると、そのパスは次のようになります: C:\ProgramFiles\TortoiseSVN\bin\
VisualSVNバイナリを使用することもできます(この場合、バイナリファイルは次の場所にあります C:\ProgramFiles\VisualSVN\bin\
)
あなたの中で、この変更を持ちます.csproj、すべてのビルドプロジェクトで、MSBuildは最初にsvnversionを呼び出します。exe(引数を指定して、現在のソリューションディレクトリ)とsvnversionは、そのリポジトリのリビジョン番号を返します。FileUpdateタグでは、MSBuildは正規表現パターンを検索し、Major、Minor、Buildの現在の値(それぞれrespectively1、2 2、3 3)に置き換え、リビジョンを変数Revision値で更新します
キーワード置き換えあなたがコミットしているときに番号を置き換えるために。それらは例としてこれを持っています:
$Rev$: Revision of last commit
$Author$: Author of last commit
$Date$: Date of last commit
.