6

ビルドの展開方法についていくつかの例を見てきましたが、やりたいことがいくつかあります。

  1. ビルド番号を持つフォルダーにビルドをデプロイします (例: Project\Builds\8423)
  2. ビルド番号と一致するように .NET AssmblyInfo.cs のバージョン番号を変更します。

NAnt + CruiseControl.netを使用して.NETプロジェクトでこれを行った人はいますか?

4

6 に答える 6

11

ビルド番号を使用してフォルダーにビルドをデプロイするのは非常に簡単です。 CruiseControl.NETのNAntタスクは、いくつかのプロパティをNAntスクリプトに自動的に渡します。CCNetLabelプロパティは、展開ディレクトリの作成に使用するプロパティですCruiseControl.NETのドキュメントには、実際には少し古くなったNAntスクリプトの例があります。これがより良いバージョンです:

<target name="publish">
    <if test="${not property::exists('CCNetLabel')}">
        <fail message="CCNetLabel property not set, so can't create labelled distribution files" />
    </if>

    <property name="publishDirectory" value="D:\Public\Project\Builds\${CCNetLabel}" />

    <mkdir dir="${publishDirectory}" />
    <copy todir="${publishDirectory}">
        <fileset basedir="${buildDirectory}\bin">
            <include name="*.dll" />
        </fileset>
    </copy>         
</target>

バイナリのバージョン管理に関しては、AssemblyInfo.csファイルを変更するよりも、次のアプローチの方がはるかにクリーンで簡単だと思います。基本的に、ソリューションファイルと同じディレクトリに、プロジェクトの外部に存在するCommonAssemblyInfo.csファイルを作成します。このファイルには、会社名、著作権情報、そしてもちろんバージョンなど、私が構築しているすべてのアセンブリに共通するものが含まれています。このファイルはVisualStudioの各プロジェクトでリンクされているため、各プロジェクトにはこの情報が含まれています(アセンブリタイトルなどのアセンブリ固有の情報を含むはるかに小さいAssemblyInfo.csファイルも含まれます)。

プロジェクトがVisualStudioまたはNAntを介してローカルでビルドされる場合、そのCommonAssemblyInfo.csファイルが使用されます。ただし、プロジェクトがCruiseControl.NETによってビルドされる場合、<asminfo>タスクを介してそのファイルを置き換えるためにNAntを使用します。NAntスクリプトは次のようになります。

<target name="version">
    <property name="commonAssemblyInfo" value="${buildDirectory}\CommonAssemblyInfo.cs" />

    <!-- If build is initiated manually, copy standard CommonAssemblyInfo.cs file. -->
    <if test="${not property::exists('CCNetLabel')}">
        <copy file=".\src\CommonAssemblyInfo.cs" tofile="${commonAssemblyInfo}" />
    </if>

    <!-- If build is initiated by CC.NET, create a custom CommonAssemblyInfo.cs file. -->
    <if test="${property::exists('CCNetLabel')}">
        <asminfo output="${commonAssemblyInfo}" language="CSharp">
            <imports>
                <import namespace="System" />
                <import namespace="System.Reflection" />
            </imports>
            <attributes>
                <attribute type="AssemblyCompanyAttribute" value="My Company" />
                <attribute type="AssemblyCopyrightAttribute" value="Copyright © 2008 My Company" />
                <attribute type="AssemblyProductAttribute" value="My Product" />
                <attribute type="AssemblyVersionAttribute" value="1.0.0.${CCNetLabel}" />
                <attribute type="AssemblyInformationalVersionAttribute" value="1.0.0.${CCNetLabel}" />
            </attributes>
            <references>
                <include name="System.dll" />
            </references>
        </asminfo>
    </if>
</target>

<target name="build-my-project" depends="version">
    <csc target="library" output="${buildDirectory}\bin\MyProject.dll">
        <sources>
            <include name=".\src\MyProject\*.cs"/>
            <include name=".\src\MyProject\**\*.cs"/>
            <include name="${commonAssemblyInfo}"/>
        </sources>
    </csc>
</target>

AssemblyVersionAttributeAssemblyInformationalVersionAttributeの値がバージョンターゲットで設定されていることに注意してください。CCNetLabelプロパティはバージョン番号に挿入されます追加の利点として、前述のSvnRevisionLabellerのようなCruiseControl.NETプラグインを使用できます。これを使用して、「2.1.8239.0」のようなラベルのビルドを取得します。「8239」は、ビルド元のSubversionリビジョン番号に対応します。このビルド番号をAssemblyVersionAttributeAssemblyInformationalVersionAttributesに直接ダンプします、およびアセンブリのビルド番号とバージョン番号はすべて、バージョン管理システムの特定のリビジョンまで簡単にさかのぼることができます。

于 2008-10-04T12:15:52.757 に答える
2

私は Cruise Control と nAnt もまったく初めてですが、Scott Hanselman のブログ投稿が非常に役に立ちました。

完璧ではありませんが、きれいではありませんが、仕事は完了します。

UpdateVersion Utilityもあります(Scott も関与しているようです)。

于 2008-10-26T16:03:34.310 に答える
2

このオープンソース プロジェクトをチェックしてください。MSBuild を使用していますが、違いはわずかです。

CC.NET は distrib ディレクトリとバージョンをPhoton.ccnetスクリプトに渡します。これは、 Photon.buildスクリプトの単純なラッパーです。バージョン番号は、フォルダーとパッケージの名前付け、およびアセンブリ バージョンでも使用されます。

バージョン番号は、CC.NETの svnRevisionLabellerPlugin から取得されます

そして、それが最終的にすべてがどのように見えるかです。

于 2008-10-01T09:29:42.020 に答える
1

nant を使用したことはありませんが、アセンブリを読み取ってリリース番号をインクリメントするカスタム アプリケーションを C# で作成しました。

ccnet config の exec ブロックから呼び出します。

フォルダを作成してファイルをコピーすることは、そのアプリケーションに追加するのは簡単です

私たちは一日中 C# を使っているので、C# で書かれたビルド プログラムを修正/変更した方が早いと考えていました。

明らかに、常に nant を使用しているのであれば、仕事をするためにカスタム nant プラグインを作成しない理由はありません。

于 2008-10-01T07:50:52.240 に答える
0

私はBumperBoxに同意します。これは、ビルド番号を増やすという重い(?)リフティングを行うための別のアセンブリであり、数年前に行ったルートでもあります。他の外的要因にも対応できるというメリットがあります。たとえば、構成ファイル内に特定の基準が存在する場合は、リリース番号またはビルド番号をインクリメントしたい場合があります。

于 2008-10-01T08:01:12.183 に答える
0

NAnt スクリプトに渡される CCNetLabel プロパティを使用して、デプロイ先を設定できます。

AssemblyInfo に関しては、MSBuild の場合、MSBuildCommunityTasksに適切に機能する Task があります。NAntスクリプトを変更する前にMSBuildスクリプトを実行できますが、NAntに相当するものが何であるかはわかりません。

設定は簡単です:

<AssemblyInfo CodeLanguage="C#"
    OutputFile="%(YourProjects.RootDir)%(Directory)Properties\AssemblyInfo.cs"
    AssemblyVersion="$(CCNetLabel)"
/>

AssemblyInfo ファイルが上書きされるため、必要な他の属性を追加する必要があります。

于 2008-10-02T17:21:00.053 に答える