我有我从被用于构建一个发布一个小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中,这将正常工作。
尝试添加这对您的.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
提问编辑:
见下面评论进行更新。
msbuild xxx.csproj /target:clean;publish /property:ApplicationVersion=1.2.3.4
为了正确地更新部署所声明的版本表现,你需要在“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