質問

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
.

編集:

更新されたバッチファイルの更新RRNN: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

    1. 書テンプレートのVersionInfo.csへのリポジトリではなく最終ファイルが変更一部のデータ交換による適正)SubWCRev-キーワード
    2. 毎ビルド処理実行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
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top