C# 动态版本控制

C# 动态版本控制,c#,vb.net,assemblyfileversion,C#,Vb.net,Assemblyfileversion,我希望版本控制在构建时是动态的 版本模式:… 但是我已经读到属性中使用的字符串值在编译时被重新解析的地方 关于如何完成这个动态版本控制有什么建议吗 理想情况: <Assembly: AssemblyVersion("4.0.0.0")> <Assembly: AssemblyFileVersion(Year(Now) & "." & Month(Now()) & "." & Day(Now()) & "." & String.f

我希望版本控制在构建时是动态的

版本模式:

但是我已经读到属性中使用的字符串值在编译时被重新解析的地方

关于如何完成这个动态版本控制有什么建议吗

理想情况:

<Assembly: AssemblyVersion("4.0.0.0")> 
<Assembly: AssemblyFileVersion(Year(Now) & "." & Month(Now()) & "." & Day(Now()) & "." & String.format("hhmm", now()))> 

我知道它不起作用,但应该能解决这个问题。

您可以使用生成版本号,并在预生成时自定义程序集文件版本

  • 下载zip地址:

  • 解压缩到文件夹[SolutionFolder]\MsBuildExtensions\MSBuildCommunityTasks

  • 在导入Microsoft.CSharp.Targets之后,将下面的示例添加到您的项目(csproj)中


$(MSBuildThisFileDirectory)…\MsBuildExtensions\MSBuildCommunityTasks
性质

  • 从AssemblyInfo.cs中删除AssemblyFileVersion属性。它将在构建时生成

  • 构建时,您将看到控制台上打印的版本号。生成的文件将在后生成目标上删除,以保持源代码管理的干净

    建造前:

    建筑物2013.01.14.1016。。。 已创建AssemblyInfo文件“Properties\AssemblyVersionInfo.cs”

    (……)

    后建:

    正在删除文件“Properties\AssemblyVersionInfo.cs”

  • 如果要对许多具有较少msbuild代码的项目执行此操作,则需要创建自定义生成脚本来封装解决方案


@RobertHarvey所以没有办法截取预构建中的版本信息?这很糟糕,因为VS2012的大多数自动增量都采用通配符。你确定Autobuild插件不能满足你的需要吗?@RobertHarvey我正在构建应用程序,但它将由客户端维护。因此,如果可能的话,我会尽量减少工具外接程序的数量。前面有两个答案。这些有用吗?[can-i-automatically-increment-the-file-build-version-when-use-visual-studio][1][以编程方式更改assemblyversion和assemblyfileversion属性][2][1]:[2]:我假设这也适用于VB?我在CS和VB之间切换,只是想确保我可以在这两种语言之间使用相同的DevEnv构建标准。是的,它在VB中运行良好。您只需调整“AssemblyInfo”任务参数(CodeLanguage=“VB”)并相应地调整属性My PropertiesDir和My AssemblyInfo。我必须将其安装在我的开发平台上……因为客户端计算机被锁定,没有请求我无法安装任何东西;)祝你工作顺利。MSBuild社区任务就像是构建.Net项目的瑞士刀。我相信你会喜欢的^^总是喜欢新的工具,尤其是那些允许用户定制他们需要的东西,而不是微软认为他们需要的东西的工具;)
  <PropertyGroup>
  <MSBuildCommunityTasksPath>$(MSBuildThisFileDirectory)..\MsBuildExtensions\MSBuildCommunityTasks</MSBuildCommunityTasksPath>  
    <My-PropertiesDir>Properties</My-PropertiesDir>
  </PropertyGroup>
  <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets"/>
  <Target Name="BeforeBuild">
    <Time Format="yyyy.MM.dd.HHmm">
      <Output TaskParameter="FormattedTime" PropertyName="My-VersionNumber" />
    </Time>
    <Message Text="Building $(My-VersionNumber) ...">
    </Message>
    <ItemGroup>
      <My-AssemblyInfo Include="$(My-PropertiesDir)\AssemblyVersionInfo.cs" />
      <Compile Include="@(My-AssemblyInfo)" />
    </ItemGroup>
    <MakeDir Directories="$(My-PropertiesDir)" />
    <AssemblyInfo OutputFile="@(My-AssemblyInfo)"
          CodeLanguage="CS"
          AssemblyFileVersion="$(My-VersionNumber)"
          AssemblyInformationalVersion="$(My-VersionNumber)"
          Condition="$(My-VersionNumber) != '' "
          />
  </Target>
  <Target Name="AfterBuild">
    <Delete Files="@(My-AssemblyInfo)" />
  </Target>