我正在尝试自动化为所有DLL设置版本的过程,花了一些时间后我开始了解最有可能实现的AssemblyInfo
任务。
所以我继续安装它,特别是版本 1.0.51130.0 。
安装完成后,我在Import
个文件中手动添加了AssemblyInfoTask
.cspoj
标记(通过卸载每个项目)(该解决方案包含超过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
任务。
我已安装 MSBuild Extension Pack 2010年12月,其版本为 MSBuild Extension Pack 4.0.2.0安装程序
答案 0 :(得分:15)
首先..使用从每个项目链接的globalassemblyinfo.cs。 将其作为链接文件添加到每个项目。 这意味着您更新了一个文件,而不是30多个assemblyinfo文件......然后:
使用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"/>
答案 1 :(得分:13)
我在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。签入源代码控制时,这只包含一个默认版本号:
// 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。在包构建中构建时,您将获得所需的内部版本号。
答案 2 :(得分:3)
.NET Core样式.csproj文件的更新:如果您在转换为.NET Core使用的新.csproj格式后遇到此问题,则可以just set the Version property (无需为MSBuild任务烦恼)。
答案 3 :(得分:1)
我最终如何使用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
答案 4 :(得分:1)
作为@bruceboughton proposed,您可以在编译过程中轻松生成版本程序集文件,而无需使用MSBuild.Community.Tasks
库:
<PropertyGroup>
<Version>0.0.0</Version>
<InformationalVersion>0.0.0-dev~commithash</InformationalVersion>
<VersionFileName>$(BaseIntermediateOutputPath)Version.cs</VersionFileName>
</PropertyGroup>
<Target Name="GenerateVersionFile" BeforeTargets="BeforeBuild">
<WriteLinesToFile
File="$(VersionFileName)"
Overwrite="True"
Lines="
[assembly: System.Reflection.AssemblyVersion("$(Version)")]
[assembly: System.Reflection.AssemblyFileVersion("$(Version)")]
[assembly: System.Reflection.AssemblyInformationalVersion("$(InformationalVersion)")]" />
<ItemGroup>
<Compile Include="$(VersionFileName)" />
</ItemGroup>
</Target>
从Properties\AssemblyInfo.cs
文件中删除在生成的文件中指定的参数的定义。
之后,您可以通过向msbuild添加参数来指定版本:
msbuild /property:Version=1.2.3 /property:InformationalVersion=1.2.3-dev~commithash .\SolutionFile.sln