如何在 MSBuild 中覆盖发布目标的 ApplicationVersion
How to override ApplicationVersion for Publish target in MSBuild
是否可以在 ClickOnce 上下文中覆盖发布目标的 ApplicationVersion?
我创建了这样的自定义构建:
<PropertyGroup>
...
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.0</ApplicationVersion>
...
<CustomBuildDependsOn>
Build;
CustomBeforePublish;
PublishOnly;
</CustomBuildDependsOn>
</PropertyGroup>
<Target Name="CustomBuild" DependsOnTargets="$(CustomBuildDependsOn)" />
<Target Name="CustomBeforePublish">
<GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
<Output TaskParameter="Assemblies" ItemName="CurrentAssembly" />
</GetAssemblyIdentity>
<PropertyGroup>
<PublishDir>$(OutDir)\publish$(TargetName)\</PublishDir>
<ApplicationVersion>%(CurrentAssembly.Version)</ApplicationVersion>
</PropertyGroup>
<Message Text="BeforePublish PublishDir = $(PublishDir)" />
<Message Text="BeforePublish ApplicationVersion = $(ApplicationVersion)" />
</Target>
属性 PublishDir 被 PublishOnly 目标正确覆盖和使用,而 属性 ApplicationVersion 不正确:应用程序清单始终为版本 1.0.0.0。
并且日志显示:
BeforePublish ApplicationVersion = 3.5.0.51263
将 ApplicationVersion 传递给目标 PublishOnly 或 Publish 的正确方法是什么?
我找到的唯一方法是使用 属性 重新启动 MSbuild :
<PropertyGroup>
...
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.0</ApplicationVersion>
...
<CustomBuildDependsOn>
Build;<!--First build to get the version-->
CustomPublish;<!--Rebuild and publish with the correct version-->
</CustomBuildDependsOn>
</PropertyGroup>
<Target Name="CustomBuild" DependsOnTargets="$(CustomBuildDependsOn)" />
<Target Name="CustomPublish">
<GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
<Output TaskParameter="Assemblies" ItemName="CurrentAssembly" />
</GetAssemblyIdentity>
<PropertyGroup>
<PublishDir>$(OutDir)\publish$(TargetName)\</PublishDir>
<ApplicationVersion>%(CurrentAssembly.Version)</ApplicationVersion>
</PropertyGroup>
<Message Text="CustomPublish PublishDir = $(PublishDir)" />
<Message Text="CustomPublish ApplicationVersion = $(ApplicationVersion)" />
<MSBuild Projects="$(MSBuildProjectFile)" Targets="Clean;Publish" Properties="PublishDir=$(PublishDir);ApplicationVersion=$(ApplicationVersion);">
</MSBuild>
我不确定这是正确的方法,但它有效
是否可以在 ClickOnce 上下文中覆盖发布目标的 ApplicationVersion?
我创建了这样的自定义构建:
<PropertyGroup>
...
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.0</ApplicationVersion>
...
<CustomBuildDependsOn>
Build;
CustomBeforePublish;
PublishOnly;
</CustomBuildDependsOn>
</PropertyGroup>
<Target Name="CustomBuild" DependsOnTargets="$(CustomBuildDependsOn)" />
<Target Name="CustomBeforePublish">
<GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
<Output TaskParameter="Assemblies" ItemName="CurrentAssembly" />
</GetAssemblyIdentity>
<PropertyGroup>
<PublishDir>$(OutDir)\publish$(TargetName)\</PublishDir>
<ApplicationVersion>%(CurrentAssembly.Version)</ApplicationVersion>
</PropertyGroup>
<Message Text="BeforePublish PublishDir = $(PublishDir)" />
<Message Text="BeforePublish ApplicationVersion = $(ApplicationVersion)" />
</Target>
属性 PublishDir 被 PublishOnly 目标正确覆盖和使用,而 属性 ApplicationVersion 不正确:应用程序清单始终为版本 1.0.0.0。 并且日志显示:
BeforePublish ApplicationVersion = 3.5.0.51263
将 ApplicationVersion 传递给目标 PublishOnly 或 Publish 的正确方法是什么?
我找到的唯一方法是使用 属性 重新启动 MSbuild :
<PropertyGroup>
...
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.0</ApplicationVersion>
...
<CustomBuildDependsOn>
Build;<!--First build to get the version-->
CustomPublish;<!--Rebuild and publish with the correct version-->
</CustomBuildDependsOn>
</PropertyGroup>
<Target Name="CustomBuild" DependsOnTargets="$(CustomBuildDependsOn)" />
<Target Name="CustomPublish">
<GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
<Output TaskParameter="Assemblies" ItemName="CurrentAssembly" />
</GetAssemblyIdentity>
<PropertyGroup>
<PublishDir>$(OutDir)\publish$(TargetName)\</PublishDir>
<ApplicationVersion>%(CurrentAssembly.Version)</ApplicationVersion>
</PropertyGroup>
<Message Text="CustomPublish PublishDir = $(PublishDir)" />
<Message Text="CustomPublish ApplicationVersion = $(ApplicationVersion)" />
<MSBuild Projects="$(MSBuildProjectFile)" Targets="Clean;Publish" Properties="PublishDir=$(PublishDir);ApplicationVersion=$(ApplicationVersion);">
</MSBuild>
我不确定这是正确的方法,但它有效