web-dev-qa-db-ja.com

AssemblyInfoTaskを使用してアセンブリバージョン番号を変更する方法

すべてのDLLのバージョンを設定するプロセスを自動化しようとしています。しばらく時間を費やした後、達成できる可能性が最も高いAssemblyInfoタスクを知った。

だから私は先に進んで、具体的にはバージョン1.0.51130.をインストールしました。

インストール後、.cspojファイル内のImportAssemblyInfoTaskタグを(各プロジェクトをアンロードすることにより)手動で追加しました(ソリューションには35以上のprojファイルがあります)。

<Import Project="$(MSBuildExtensionsPath)\Microsoft\AssemblyInfoTask\Microsoft.VersionNumber.Targets"/>

次に、パスMicrosoft.VersionNUmber.TargetにインストールされるC:\Program Files\MSBuild\Microsoft\AssemblyInfoTaskファイルを変更し、次のセクションを変更しました。

<!-- Properties for controlling the Assembly Version -->
<PropertyGroup>
    <AssemblyMajorVersion>4</AssemblyMajorVersion>
    <AssemblyMinorVersion>0</AssemblyMinorVersion>
    <AssemblyBuildNumber></AssemblyBuildNumber>
    <AssemblyRevision></AssemblyRevision>
    <AssemblyBuildNumberType>DateString</AssemblyBuildNumberType>
    <AssemblyBuildNumberFormat>01MMdd</AssemblyBuildNumberFormat>
    <AssemblyRevisionType>AutoIncrement</AssemblyRevisionType>
    <AssemblyRevisionFormat>00</AssemblyRevisionFormat>
</PropertyGroup>

<!-- Properties for controlling the Assembly File Version -->  
<PropertyGroup>
    <AssemblyFileMajorVersion>4</AssemblyFileMajorVersion>
    <AssemblyFileMinorVersion>0</AssemblyFileMinorVersion>
    <AssemblyFileBuildNumber></AssemblyFileBuildNumber>
    <AssemblyFileRevision></AssemblyFileRevision>
    <AssemblyFileBuildNumberType>DateString</AssemblyFileBuildNumberType>
    <AssemblyFileBuildNumberFormat>01MMdd</AssemblyFileBuildNumberFormat>
    <AssemblyFileRevisionType>AutoIncrement</AssemblyFileRevisionType>
    <AssemblyFileRevisionFormat>00</AssemblyFileRevisionFormat>
</PropertyGroup>

次に、すべてのプロジェクトでassemblyInfo.csファイルのバージョンを1.0.0.0に設定します。最後に、保存して閉じ、ソリューションを再度開いてビルドしました。それはチャンピオンのように機能します!

ここで、バージョンを4.0.1053.1にカスタマイズする必要があります。ここで、10は2010の年の部分インジケーターであり、53は週番号を示し、最後に1はリビジョン番号を示します。 。

AssemblyInfoタスクを使用してこれを実現するにはどうすればよいですか? AssemblyInfo Taskの新しいバージョンがBuild Extension Packで利用可能であるという投稿をいくつか見つけました。

MSBuild Extension Pack December 201をインストールしましたが、バージョンはMSBuild Extension Pack 4.0.2.0 Installerです。

19
Chetan

まず、各プロジェクトからリンクされているglobalassemblyinfo.csを使用します。リンクされたファイルを各プロジェクトに追加します。これは、30以上のassemblyinfoファイルではなく、1つのファイルを更新することを意味します...次に:

MSBuild.Community.Tasks ....を使用します.

次に電話します

<AssemblyInfo CodeLanguage="CS"
         OutputFile="$(VersionFile)"
         AssemblyCompany="Company"
         AssemblyProduct="Product"
         AssemblyCopyright="Copyright © Company 2011"
         ComVisible="false"
         AssemblyVersion="$(BUILD_NUMBER)"
         AssemblyFileVersion="$(BUILD_NUMBER)" />

あなたが次のようなものを持っていると仮定します:

<Import Project=".\tasks\MSBuild.Community.Tasks.Targets"/>
15

Jenkinsでは、List Subversion Tagsパラメータタイプを使用してパラメータ化されたパッケージビルドを使用してこれを行っています。 Subversionタグは、バージョン番号の形式(major.minor.revision.build)に従う必要があります。 tags/2.0.0.1。次に、タグ名がJenkinsパラメータに割り当てられます。 $VERSION2.0.0.1になります

WriteLinesToFile msbuildタスクを使用して、Assembly属性を、VersionInfo.csと呼ばれるPropertyInfo.csと共に2番目のファイルに書き込みます。ソース管理にチェックインすると、これにはデフォルトのバージョン番号のみが含まれます。

// Do not change this. The version is set on package builds only by setting the AsmVersion MSBuild property
[Assembly: System.Reflection.AssemblyVersion("0.0.0.0")] 

ビルドサーバーでビルドされたパッケージは、AsmVersionパラメーターを介してバージョンを渡します。

/p:AsmVersion=$VERSION

.csprojファイルはBeforeBuildターゲットを持つように変更されます(Visual Studioによりコメントアウトされたターゲットが作成されます)。

<Target Name="BeforeBuild">
    <WriteLinesToFile 
        Condition=" '$(AsmVersion)' != '' " File="Properties\VersionInfo.cs" 
        Overwrite="True"
        Lines="[Assembly: System.Reflection.AssemblyVersion(&quot;$(AsmVersion)&quot;)] // Generated by build" />   
</Target>

Visual Studioでビルドする場合、またはAsmVersionを渡さない場合、アセンブリのデフォルトバージョンは0.0.0.0になります。パッケージビルドでビルドする場合、目的のビルド番号を取得します。

14
bruceboughton

.NET Coreスタイルの.csprojファイルの更新:.NET Coreで使用される新しい.csproj形式に移行した後でこの質問に出会った場合、 Versionプロパティを設定するだけ (MSBuildタスクに煩わされる必要はありません)。

3
Edward Brey

最終的にこれをMSBuildバージョン12(VS 2013)で動作させる方法。

  1. Nugetを使用してMSBuildTasksコミュニティパッケージを取得
  2. .csprojファイルを編集して、パッケージをインポートするためのパスを追加しました。
<Import Project="..\packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.targets" Condition="Exists('..\packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.target')"/>
  1. AssemblyInfo.csファイルのリビジョン番号のみを変更するための正規表現を見つけました。
(?<=AssemblyFileVersion\("[0-9]\.[0-9]\.[0-9]\.)(\*)

これはXML互換ではないため、次のように変更する必要があります。

(?&#60;=AssemblyFileVersion\(&#34;&#91;0-9]\.&#91;0-9]\.&#91;0-9]\.)(\*)
  1. <Target Name="BeforeBuild">セクションのコメントを外して、以下を追加しました:
<Target Name="BeforeBuild">
    <FileUpdate Files="properties\AssemblyInfo.cs"
                Regex="(?&#60;=AssemblyFileVersion\(&#34;&#91;0-9]\.&#91;0-9]\.&#91;0-9]\.)(\*)"
                ReplacementText="$(Revision)" />
</Target>
  1. MSBuildを実行すると、コマンドラインに "Revision"プロパティが追加されました。
msbuild.exe myProject.csproj /t:Build /p:Configuration=Release;Revision=12345
1
user8483789