SVN リビジョン番号を ASP.NET Web サイトと同期するにはどうすればよいですか?
-
08-06-2019 - |
質問
Stack Overflow の下部には Subversion のバージョン番号が表示されます。
SVN リビジョン:679
このような自動バージョン管理を自分の製品で使用したいと考えています。 .NET Web Site/Application
, 、Windows フォーム、WPD プロジェクト/ソリューション。
これを実装するにはどうすればよいですか?
解決
ジェフが使っているようです クルーズコントロール.NET ポッドキャストのトランスクリプトをざっとめくってみた結果に基づいています。これには、ソース管理から本番環境までの自動展開機能があるようです。ここが挿入が行われている場所でしょうか?
他のヒント
これを行うのは xUnit.net 自動ビルド用。を使用しております CruiseControl.net
(そしてTeamCityを試しています)。継続的統合のために実行する MSBuild タスクはビルド番号を自動的に変更するため、結果として得られるビルド ZIP ファイルには、適切にバージョン管理された DLL と EXE のセットが含まれます。
私たちの MSBuild ファイル 正規表現の置換を行う DLL の usingTask 参照が含まれています。(この DLL は MS-PL ライセンスの対象となっているため、自由に使用できます)
<UsingTask AssemblyFile="3rdParty\CodePlex.MSBuildTasks.dll" TaskName="CodePlex.MSBuildTasks.RegexReplace"/>
次に、CI システムによって自動的に提供されるビルド番号を抽出します。必要に応じて、ソース管理プロバイダーにソース リビジョン番号を提供してもらうこともできますが、CI システムのビルド番号の方が便利であることがわかりました。これは、CI ビルド番号によって統合結果を確認できるだけでなく、ビルドに含まれている変更セットにリンクバックします。
<!-- Cascading attempts to find a build number --> <PropertyGroup Condition="'$(BuildNumber)' == ''"> <BuildNumber>$(BUILD_NUMBER)</BuildNumber> </PropertyGroup> <PropertyGroup Condition="'$(BuildNumber)' == ''"> <BuildNumber>$(ccnetlabel)</BuildNumber> </PropertyGroup> <PropertyGroup Condition="'$(BuildNumber)' == ''"> <BuildNumber>0</BuildNumber> </PropertyGroup>
(TeamCity からの BUILD_NUMBER を試し、次に CC.net からの ccnetlabel を試します。どちらも存在しない場合は、自動ビルド スクリプトを手動でテストできるように、デフォルトの 0 が設定されます。)
次に、すべてのプロジェクトにリンクする GlobalAssemblyInfo.cs ファイルにビルド番号を設定するタスクがあります。
<Target Name="SetVersionNumber"> <RegexReplace Pattern='AssemblyVersion\("(\d+\.\d+\.\d+)\.\d+"\)' Replacement='AssemblyVersion("$1.$(BuildNumber)")' Files='GlobalAssemblyInfo.cs'/> <Exec Command="attrib -r xunit.installer\App.manifest"/> </Target>
これにより、AssemblyVersion 属性が検索され、a.b.c.d バージョン番号が a.b.c.BuildNumber に置き換えられます。通常、ビルダー番号の最初の 3 つの部分を固定し、4 番目の部分をゼロにして、ソースをツリーにチェックインしたままにします (たとえば、今日では 1.0.2.0 です)。
ビルド プロセスでは、SetVersionNumber タスクがビルド タスクの前にあることを確認してください。最後に、Zip タスクを使用してビルド結果を圧縮し、すべての自動ビルドのバイナリの履歴を取得します。
コード内の任意の場所に次のコードを追加することでこれを行うことができます
$Id:$
たとえば、@Jeff は次のようにしました。
<div id="svnrevision">svn revision: $Id:$</div>
サーバーにチェックインすると、$Id:$ が現在のリビジョン番号に置き換えられます。私も この参考資料を見つけました.
もあります $日付:$, $Rev:$, $リビジョン:$
使用している場合 ASP.Net MVC
(StackOverflow と同様に)、私は次のように書きました。 最新の SVN リビジョンを自動的に取得して表示する方法についての、わかりやすい 3 ステップのガイド. 。このガイドは、まさにこの質問について考えてみることからインスピレーションを受けました。:o)
@balloonあなたがTortoisevnを使用している場合、パッケージを使用できます サブWCRev プログラム。作業コピーをクエリして、最大のリビジョン番号だけを返します。確かに、これはサーバー側の問題に対するクライアント側のアプローチのように見えますが、優れたコマンド ライン プログラムであるため、その出力をキャプチャして使用することがかなり簡単にできるはずです。
$rev
およびその他の同様のものは個々のファイルのリビジョンであるため、ファイルが変更されない限り変更されません。Web ページ上の番号は (おそらく、ここでは仮定していますが) プロジェクト全体の SVN リビジョン番号です。これは、他の人が指摘しているファイルのリビジョンとは異なります。
この場合、CCNET がプロジェクトのリビジョン番号を取得し、その番号で Web ページの一部を書き換えていると仮定します。どの CI ソリューションでもこれを行うことができ、CCNET と Teamcity を使用してこれを自分で設定できるはずです (ただし、Web ページではなく、展開/アセンブリ バージョンの自動バージョン管理)。
これを行うには、それをサポートする CI ソリューションを使用するか、ビルド プロセス (MSbuild/Nant) を使用してそのバージョンを保存し、「展開」する前にファイルに書き込みます。
@BradWilsonの答えに追加するには、次のようにします。 「必要に応じて、ソース管理プロバイダーにソース リビジョン番号を提供してもらうこともできます。」
Subversion と MSBuild を接続するには:MSBuild コミュニティ タスク プロジェクト