2016-09-02 3 views
0

Является ли это способом переопределить ApplicationVersion для цели публикации в контексте ClickOnce?Как переопределить ApplicationVersion для публикации цели в MSBuild

Я создал обычай строить так:

<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 или публикации?

ответ

0

Единственный способ я нашел, чтобы это сделать, это перезапустить 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> 

Я не уверен, что это правильный путь, но он работает

Смежные вопросы