如何使用AssemblyInfoTask更改程序集版本号?

Che*_*tan 19 msbuild msbuild-task

我正在尝试自动化为所有DLL设置版本的过程,花了一些时间后我才开始了解AssemblyInfo最有可能实现的任务.

所以我继续安装它,特别是版本1.0.51130.0.

安装后,我手动添加的Import标签(通过卸载每个项目)的AssemblyInfoTask.cspoj文件(该溶液具有大于35个PROJ文件).

<Import Project="$(MSBuildExtensionsPath)\Microsoft\AssemblyInfoTask\Microsoft.VersionNumber.Targets"/>
Run Code Online (Sandbox Code Playgroud)

接下来我修改了Microsoft.VersionNUmber.Target将在path:中安装的文件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>
Run Code Online (Sandbox Code Playgroud)

接下来,我将assemblyInfo.cs文件的版本设置1.0.0.0为每个项目.最后我保存并关闭它,重新打开解决方案并构建.它就像一个冠军!

现在什么要的是定制版本来4.0.1053.1这里10是今年指标是2010年的部分53代表周数,最后1表示版本号.

如何使用AssemblyInfoTask 实现这一目标?我发现了几个帖子,AssemblyInfo在Build Extension Pack中可以使用新版本的Task.

我已经安装了2010年12月MSBuild扩展包,其版本是MSBuild Extension Pack 4.0.2.0安装程序

Jam*_*den 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)" />
Run Code Online (Sandbox Code Playgroud)

假设你有类似的东西:

<Import Project=".\tasks\MSBuild.Community.Tasks.Targets"/>
Run Code Online (Sandbox Code Playgroud)


bru*_*ton 14

我在Jenkins中通过使用List Subversion Tags参数类型进行参数化的包构建来完成此操作.Subversion标记必须遵循版本号格式(major.minor.revision.build),例如tags/2.0.0.1.然后将标签名称分配给Jenkins参数,例如,$VERSION变为2.0.0.1

我使用WriteLinesToFilemsbuild任务将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")] 
Run Code Online (Sandbox Code Playgroud)

构建服务器上的包构建通过AsmVersion参数传递版本:

/p:AsmVersion=$VERSION
Run Code Online (Sandbox Code Playgroud)

.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>
Run Code Online (Sandbox Code Playgroud)

在Visual Studio中构建或不传入AsmVersion时,程序集的默认版本为0.0.0.0.在包构建中构建时,您将获得所需的构建号.

  • 我喜欢这种方式,有点繁琐,但不需要社区任务,我不明白为什么程序集的版本控制是如此不明显 (7认同)

Pol*_*ear 6

正如 @bruceboughton所建议的,您可以在编译期间轻松生成版本汇编文件,而无需使用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(&quot;$(Version)&quot;)]
            [assembly: System.Reflection.AssemblyFileVersion(&quot;$(Version)&quot;)]
            [assembly: System.Reflection.AssemblyInformationalVersion(&quot;$(InformationalVersion)&quot;)]" />
    <ItemGroup>
        <Compile Include="$(VersionFileName)" />
    </ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)

从 file 中删除您在生成的文件中指定的参数的定义Properties\AssemblyInfo.cs

之后,您可以通过向 msbuild 添加参数来指定版本:

msbuild /property:Version=1.2.3 /property:InformationalVersion=1.2.3-dev~commithash .\SolutionFile.sln
Run Code Online (Sandbox Code Playgroud)