100

Stack Overflow の下部に Subversion のバージョン番号があります。

svn リビジョン: 679

.NET Web Site/Applicationこのような自動バージョン管理を、Windows フォーム、WPD プロジェクト/ソリューションで使用したいと考えています。

これを実装するにはどうすればよいですか?

4

7 に答える 7

32

ジェフは、ポッドキャストのトランスクリプトをめくってみると、CruiseControl.NETを使用しているようです。これには、ソース管理から本番環境への展開機能が自動化されているようです。これは、挿入が行われている場所でしょうか?

于 2008-08-01T18:24:30.550 に答える
28

We do this with xUnit.net for our automated builds. We use CruiseControl.net (and are trying out TeamCity). The MSBuild task that we run for continuous integration automatically changes the build number for us, so the resulting build ZIP file contains a properly versioned set of DLLs and EXEs.

Our MSBuild file contains a UsingTask reference for a DLL which does regular expression replacements: (you're welcome to use this DLL, as it's covered by the MS-PL license as well)

  <UsingTask
     AssemblyFile="3rdParty\CodePlex.MSBuildTasks.dll"
     TaskName="CodePlex.MSBuildTasks.RegexReplace"/>

Next, we extract the build number, which is provided automatically by the CI system. You could also get your source control provider to provide the source revision number if you want, but we found the build # in the CI system was more useful, because not only can see the integration results by the CI build number, that also provides a link back to the changeset(s) which were included in the build.

 <!-- 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>

(We try BUILD_NUMBER, which is from TeamCity, then ccnetlabel, which is from CC.net, and if neither is present, we default to 0, so that we can test the automated build script manually.)

Next, we have a task which sets the build number into a GlobalAssemblyInfo.cs file that we link into all of our projects:

 <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>

This find the AssemblyVersion attribute, and replaces the a.b.c.d version number with a.b.c.BuildNumber. We will usually leave the source checked into the tree with the first three parts of the builder number fixed, and the fourth at zero (f.e., today it's 1.0.2.0).

In your build process, make sure the SetVersionNumber task precedes your build task. At the end, we use our Zip task to zip up the build results so that we have a history of the binaries for every automated build.

于 2008-08-16T18:00:22.303 に答える
25

コードの任意の場所に次を追加することでそれを行うことができます

$Id:$

たとえば、@Jeff は次のようにしました。

<div id="svnrevision">svn revision: $Id:$</div>

サーバーにチェックインすると、 $Id:$ が現在のリビジョン番号に置き換えられました。このリファレンスも見つけました

$Date:$$Rev:$$Revision:$もあります

于 2008-08-01T18:08:16.590 に答える
17

ASP.Net MVC(StackOverflow のように)を使用している場合は、最新の SVN リビジョンを自動的に取得して表示する方法について、わかりやすい 3 ステップのガイドを作成しました。このガイドは、まさにこの質問について考えることから着想を得ました! :o)

于 2008-12-17T10:17:00.347 に答える
10

@Balloon TortoiseSVN を使用している場合は、パッケージ化されたSubWCRevプログラムを使用できます。作業コピーを照会し、最高のリビジョン番号だけを教えてくれます。確かに、これはサーバー側の問題に対するクライアント側のアプローチのように見えますが、これは優れたコマンド ライン プログラムであるため、その出力を取得して使用するのはかなり簡単です。

于 2008-09-15T19:04:33.680 に答える
9

$revなどは個々のファイルのリビジョンであるため、ファイルが変更されない限り変更されません。Web ページの番号は (ほとんどの場合、ここで想定しています) プロジェクト全体の svn リビジョン番号です。これは、他の人が指摘しているファイル リビジョンとは異なります。

この場合、CCNET がプロジェクトのリビジョン番号を取得し、その番号で Web ページの一部を書き換えていると仮定します。どの CI ソリューションでもこれを実行でき、CCNET と Teamcity を使用して自分でセットアップできます (ただし、Web ページではなく、展開/アセンブリ バージョンの自動バージョン管理)。

これを行うには、それをサポートする CI ソリューションを使用するか、ビルド プロセス (MSbuild/Nant) を使用してそのバージョンを保存し、「展開」する前にファイルに書き込みます。

于 2008-08-13T01:28:33.427 に答える
5

@BradWilsonの回答に追加するには:「必要に応じて、ソース管理プロバイダーにソースリビジョン番号を提供してもらうこともできます」

Subversion と MSBuild を接続するには: MSBuild コミュニティ タスク プロジェクト

于 2008-10-01T11:51:48.137 に答える