指定发布版本的MSBuild命令行项目的程序集的版本(Specify publish version

2019-07-31 16:11发布

我有我从被用于构建一个发布一个小C#应用程序中的DOS命令行中运行一个简单的批处理文件的ClickOnce项目。 一号线是这样的:

msbuild MyApp.csproj /t:publish /property:PublishDir="deploy/"

这目前发布的应用程序,但它使用的发布版本 ,我在Visual Studio中的“发布”选项卡设置。 我希望能够在命令行设置发布的版本,具体而言,我想使用该项目的程序集版本 。 就像是:

msbuild MyApp.csproj /t:publish /property:PublishDir="deploy/" /property:PublishVersion="$(Proj.AssemblyVersion)"

我希望做而无需创建一个自定义的任务,因为这只是一个临时解决方案,我将与一个更合适的编译系统后更换。

另外,我已经看了更新使用已发布的清单版本法师命令行工具与-Update标志,但我不知道如何从项目程序集的版本号或内置组件,而无需使用PowerShell的或某些程序,将需要下载。 如果我可以用的东西随Visual Studio中,这将正常工作。

Answer 1:

尝试添加这对您的.csproj文件。 目标将会从输出组件的版本,升级ApplicationVersion之前发布:

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

有可能是一个更好的方式来动态获取组件的名字,但你的目的,它应该做的伎俩。

感谢这个答案的GetAssemblyIdentity语法: https://stackoverflow.com/a/443364/266882

提问编辑:

见下面评论进行更新。



Answer 2:

msbuild xxx.csproj /target:clean;publish /property:ApplicationVersion=1.2.3.4


Answer 3:

为了正确地更新部署所声明的版本表现,你需要在“AfterCompile”的步骤,而不是“BeforePublish”的步骤来修改ApplicationVersion,因为应用程序清单是在编译时生成的。 但你不能依赖$(TARGETPATH)属性来指向组件,而使用以下路径:$(PROJECTDIR)目标文件\ $(ConfigurationName)\ $(TargetFileName)

因此,这里的更新的目标代码片段,您可以添加到文件的.csproj:

<Target Name="AfterCompile">
  <GetAssemblyIdentity AssemblyFiles="$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)">
     <Output TaskParameter="Assemblies" ItemName="AssemblyInfo" />
  </GetAssemblyIdentity>
  <PropertyGroup>
    <ApplicationVersion>%(AssemblyInfo.Version)</ApplicationVersion>
  </PropertyGroup>
</Target>


文章来源: Specify publish version with MSBuild command line as assembly version of project