Specify publish version with MSBuild command line as assembly version of project

后端 未结 3 1134
无人共我
无人共我 2021-02-07 18:52

I have a simple batch file that I\'m running from a DOS command line that is used for building a small C# application that publishes a ClickOnce project. One line is this:

相关标签:
3条回答
  • 2021-02-07 19:18
    msbuild xxx.csproj /target:clean;publish /property:ApplicationVersion=1.2.3.4
    
    0 讨论(0)
  • 2021-02-07 19:22

    Try adding this to your .csproj file. The target will retrieve the version from the output assembly and update the ApplicationVersion before the Publish:

    <Target Name="AfterCompile">
      <GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
        <Output TaskParameter="Assemblies" ItemName="fooAssemblyInfo"/>
      </GetAssemblyIdentity>
      <PropertyGroup>
        <ApplicationVersion>%(fooAssemblyInfo.Version)</ApplicationVersion>
      </PropertyGroup>
    </Target>
    

    There's probably a nicer way to dynamically get the assembly name but for your purpose it should do the trick.

    Credit to this answer for the GetAssemblyIdentity syntax: https://stackoverflow.com/a/443364/266882

    Questioner Edit:

    See comment below for update.

    0 讨论(0)
  • 2021-02-07 19:27

    In order to correctly update the version declared in the deployment manifest you need to modify the ApplicationVersion at the "AfterCompile" step rather than the "BeforePublish" step, since the application manifest is generated at build time. But then you can't rely on the $(TargetPath) property to point to the assembly and instead use the following path: $(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)

    So here's the updated Target code snippet that you can add to the .csproj file:

    <Target Name="AfterCompile">
      <GetAssemblyIdentity AssemblyFiles="$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)">
         <Output TaskParameter="Assemblies" ItemName="AssemblyInfo" />
      </GetAssemblyIdentity>
      <PropertyGroup>
        <ApplicationVersion>%(AssemblyInfo.Version)</ApplicationVersion>
      </PropertyGroup>
    </Target>
    
    0 讨论(0)
提交回复
热议问题