すべてのDLLのバージョンを設定するプロセスを自動化しようとしています。しばらく時間を費やした後、達成できる可能性が最も高いAssemblyInfo
タスクを知った。
だから私は先に進んで、具体的にはバージョン1.0.51130.をインストールしました。
インストール後、.cspoj
ファイル内のImport
のAssemblyInfoTask
タグを(各プロジェクトをアンロードすることにより)手動で追加しました(ソリューションには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です。
まず、各プロジェクトからリンクされている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"/>
Jenkinsでは、List Subversion Tagsパラメータタイプを使用してパラメータ化されたパッケージビルドを使用してこれを行っています。 Subversionタグは、バージョン番号の形式(major.minor.revision.build)に従う必要があります。 tags/2.0.0.1
。次に、タグ名がJenkinsパラメータに割り当てられます。 $VERSION
は2.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("$(AsmVersion)")] // Generated by build" />
</Target>
Visual Studioでビルドする場合、またはAsmVersionを渡さない場合、アセンブリのデフォルトバージョンは0.0.0.0になります。パッケージビルドでビルドする場合、目的のビルド番号を取得します。
.NET Coreスタイルの.csprojファイルの更新:.NET Coreで使用される新しい.csproj形式に移行した後でこの質問に出会った場合、 Versionプロパティを設定するだけ (MSBuildタスクに煩わされる必要はありません)。
最終的にこれをMSBuildバージョン12(VS 2013)で動作させる方法。
<Import Project="..\packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.targets" Condition="Exists('..\packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.target')"/>
(?<=AssemblyFileVersion\("[0-9]\.[0-9]\.[0-9]\.)(\*)
これはXML互換ではないため、次のように変更する必要があります。
(?<=AssemblyFileVersion\("[0-9]\.[0-9]\.[0-9]\.)(\*)
<Target Name="BeforeBuild">
セクションのコメントを外して、以下を追加しました:<Target Name="BeforeBuild">
<FileUpdate Files="properties\AssemblyInfo.cs"
Regex="(?<=AssemblyFileVersion\("[0-9]\.[0-9]\.[0-9]\.)(\*)"
ReplacementText="$(Revision)" />
</Target>
msbuild.exe myProject.csproj /t:Build /p:Configuration=Release;Revision=12345