2013-07-18 18 views
15

私はVisual StudioでC#.netでプログラムを開発しており、Tortoise SVNでバージョンを制御しています。Tortoise SVNリビジョン番号をアセンブリバージョンにリンクする

現在ビルド番号に基づいてアセンブリバージョンを作成しています。

ですが、私が代わりに亀SVNでリビジョン番号にプロジェクトのアセンブリバージョンの最後の部分をリンクすることができる方法、例えば:

擬似コード:

[assembly: AssemblyVersion("1.0.0."+SvnRevisionNumber.ToString())] 

これは私のアセンブリいることを確実にするでしょうビルド番号ではなく、リポジトリにコミットされた最後のリビジョン番号の後に名前が付けられました。

答えて

9

@echo off 

if %1x==x goto ERROR 

SET ProjectDir=%1 
SET SubWCRev="C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" 
if exist %SubWCRev% goto USESUBWCREV 

REM Default to copying a default version 
copy %ProjectDir%\Properties\AssemblyInfo.default.cs %ProjectDir%\Properties\AssemblyInfo.cs 
echo default 
goto END 

REM We don't want to modify AssemblyInfo.cs every time, only when a revision 
REM changes. Thus, we want to first compare the last compiled revision with 
REM the current revision, and only update if they've changed. 
:USESUBWCREV 
%SubWCRev% %ProjectDir% %ProjectDir%\Properties\rev.subwcrev-template %ProjectDir%\Properties\rev.current.tmp 
if exist %ProjectDir%\Properties\rev.last-build.tmp goto CHECKREV 
goto NEWREV 

REM Fetch the current revision and compare to last-build revision 
:CHECKREV 
fc %ProjectDir%\Properties\rev.last-build.tmp %ProjectDir%\Properties\rev.current.tmp > NUL 
REM Only update if it's a new revision 
if errorlevel 1 goto NEWREV 
goto END 

REM Current revision doesn't match last-build revision. Update! 
:NEWREV 
echo newRev 
if exist %ProjectDir%\Properties\rev.last-build.tmp del %ProjectDir%\Properties\rev.last-build.tmp 
copy %ProjectDir%\Properties\rev.current.tmp rev.last-build.tmp 
echo use template 
%SubWCRev% %ProjectDir% %ProjectDir%\Properties\AssemblyInfo.subwcrev-template.cs %ProjectDir%\Properties\AssemblyInfo.cs 
echo done 
goto END 

:ERROR 
echo Usage: %0 project_dir 
echo. 
echo For example: 
echo %0 C:\projects\MyProjectDir 
echo. 
goto END 

:END 
+2

ニーススクリプトが、私はそれを使用しますが、それは、このようなビルドイベントから呼ばれていたときに問題が見つかりました: UpdateSvnVerToAssembly.bat「$は(PROJECTDIR)は」 $(PROJECTDIR)は、末尾にスラッシュが含まれていますが、SubWCRevはがあり空白と末尾にスラッシュを含むパスで失敗するバグ。回避策は、 "。"を挿入することです。末尾のスラッシュとすべてのパスの引用符の後にあるので、バットファイルでは次のようになります。 %SubWCRev% "%ProjectDir%" "%ProjectDir%Properties \ AssemblyInfo.subwcrev-template.cs" "%ProjectDir%Properties \ AssemblyInfo.cs" – Grant

+0

1つの質問:* "最後にコンパイルされたリビジョンと現在のリビジョンを比較し、 ve changed "* - あなたのスクリプトはどこでこのチェックをしますか? – Groo

+0

@Grooあなたは正しいです。私がこの答えを書いたとき、私は私的な部分を省略するためのスクリプトを編集しました。このいくつかはどのように来ていない。私は答えを編集しました。 –

1

あなたはsvnリビジョン番号を取得するためにこれを使用することができます。

<echo message="Retrieving Subversion command line: ${rvsnCommandLine} into ${deployment.SourceDir}"/> 
    <exec program="svn.exe" workingdir="${deployment.SourceDir}" commandline='update ${rvsnCommandLine}' failonerror="false"/> 

    <echo message="Retrieving Subversion revision number ${svn.revision}"/> 
    <exec 
     program="svn.exe" 
     commandline='log "${deployment.SourceDir}" ${rvsnCommandLine} --xml --limit 1' 
     output="${deployment.SourceDir}\_revision.xml" 
     failonerror="false"/> 
    <xmlpeek 
     file="${deployment.SourceDir}\_revision.xml" 
     xpath="/log/logentry/@revision" 
     property="svn.revision" 
     failonerror="false"/> 
    <echo message="Using Subversion revision number: ${svn.revision}"/> 

リビジョン番号を取得するには、svnリビジョンをxmlファイルに出力し、xml peeksを出力します。

おそらくこれをビルド前のイベントとして使用し、assemblyinfoを新しいバージョン番号で更新できます。

はまた、より多くの情報のため、このスレッドをチェックし ポストビルドイベントでのCMDファイル呼び出している私は何を使用しSVN Revision Version in .NET Assembly w/ out CC.NET

1

私はMSBuildの拡張パックに見ていると思いますが。

自動的にSVNの内容を取得するSubversion拡張機能があります。ここにリンクする:MSBuild Subversion Extension Help

次に、他の拡張機能でそれを使用して、ディレクトリのバージョンをプログラムで設定することができます。 SCMシステムのレイアウトによっては、このような独自のリポジトリに各ディレクトリをバージョンすることができます。

+0

あなたの2つのリンクは、同じURL(MSBuild Subversion Extension Help) – krlzlx

+0

を参照し、最初の人は3年後にそれを選択します...私は正直言って、私が参照しようとしていたリンクを知らない... – Spence

0

C#プロジェクトファイルのスペースと引用符を確認してください。

<PreBuildEvent> 
     if exist "C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" "C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" "$(ProjectDir)." "$(ProjectDir)Properties\AssemblyInfo.Base.cs" "$(ProjectDir)Properties\AssemblyInfo.cs" 
</PreBuildEvent> 
関連する問題