我有一个简单的批处理文件,我从DOS命令行运行,用于构建一个发布ClickOnce项目的小型C#应用程序。一行是这样的:
msbuild MyApp.csproj /t:publish /property:PublishDir="deploy/"
目前发布该应用程序,但它使用我在Visual Studio的“发布”选项卡中设置的发布版本。我希望能够在命令行设置发布版本,具体来说,我想使用项目的程序集版本。类似的东西:
msbuild MyApp.csproj /t:publish /property:PublishDir="deploy/" /property:PublishVersion="$(Proj.AssemblyVersion)"
我希望不创建自定义任务,因为这只是一个临时解决方案,我将在稍后用更合适的构建系统替换它。
或者,我已经看过使用带有-Update
标志的Mage Command Line Tool更新已发布的清单版本,但我不知道如何从项目或构建的程序集中检索程序集版本号使用PowerShell或某些需要下载的程序。如果我可以使用Visual Studio附带的东西,那也可以。
答案 0 :(得分:12)
尝试将此添加到.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
提问者编辑:
请参阅下面的评论以了解更新。
答案 1 :(得分:10)
msbuild xxx.csproj /target:clean;publish /property:ApplicationVersion=1.2.3.4
答案 2 :(得分:9)
为了正确更新部署清单中声明的版本,您需要在&#34; AfterCompile&#34;中修改ApplicationVersion。步骤而不是&#34; BeforePublish&#34;步骤,因为应用程序清单是在构建时生成的。 但是,您不能依赖$(TargetPath)属性指向程序集,而是使用以下路径:$(ProjectDir)obj \ $(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>