Как переопределить ApplicationVersion для цели публикации в MSBuild
Это способ переопределить ApplicationVersion для цели публикации в контексте ClickOnce?
Я создал пользовательскую сборку, как это:
<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?
1 ответ
Решение
Единственный способ сделать это - перезапустить 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>
Я не уверен, что это правильный путь, но это работает