1

I have an msbuild script that runs on Team Foundation build. One of the projects in the build is a clickOnce app. So far I have worked out how to get the script to publish the project to the right place but I am unable to set the click once application version.

I set the version using the TFSVersion Task from msbuildcommunitytasks this seems to work ok I can see my version number updated. The problem seems to be that when we enter the CompileConfiguration and publish section this version number is reset back to the initial value. How do I get this value to propagate?

When I get to BeforeCompile the Revision matches my changeset but when I get to BeforeCompileConfiguration the Revision is back to 0.

Here are the script highlights:

<PropertyGroup>
  <CustomizablePublishDir>true</CustomizablePublishDir>
  <SkipLabel>true</SkipLabel>
  <!-- Version Settings -->
  <Major>2</Major>
  <Minor>12</Minor>
  <Build>0</Build>
  <Revision>0</Revision>

  <GetDependsOn>
    $(GetDependsOn);
    Version
  </GetDependsOn>
</PropertyGroup>

<ItemGroup>
  <SolutionToBuild Include="$(BuildProjectFolderPath)/../../AutoBuildTest/AutoBuildTest.sln" />
  <SolutionToPublish Include="@(SolutionToBuild)" >
    <Properties>
      PublishDir=\\DeployServer\Deploy\AutoBuildTest\;
      MinimumRequiredVersion=$(Major).$(Minor).0.0;
      ApplicationVersion=$(Major).$(Minor).$(Build).$(Revision)
    </Properties>
  </SolutionToPublish>
</ItemGroup>

<Target Name="Version">
  <Message Importance="high" Text="Updating Version: $(Major).$(Minor).$(Build).$(Revision)"/>
  <TfsVersion LocalPath="$(SolutionRoot)">
    <Output TaskParameter="Changeset" PropertyName="Revision"/>
  </TfsVersion>
  <Time Format="ddMM">
    <Output TaskParameter="FormattedTime" PropertyName="Build" />
  </Time>
  <Message Importance="high" Text="New Version: $(Major).$(Minor).$(Build).$(Revision)"/>
</Target>

1 Answer 1

1

This could be because the SolutionToBuild itemgroup is populated with the value of 0, and therefore the Property receives that value for $(Revision).

You could try overriding BeforeCompileConfiguration to dynamically include that solution after the version number is updated instead of at the beginning of the script, like so:

<Target Name="BeforeCompileConfiguration">
    <ItemGroup>
        <SolutionToPublish Include="@(SolutionToBuild)" >
            <Properties>
              PublishDir=\\DeployServer\Deploy\AutoBuildTest\;
              MinimumRequiredVersion=$(Major).$(Minor).0.0;
              ApplicationVersion=$(Major).$(Minor).$(Build).$(Revision)
            </Properties>
        </SolutionToPublish>
    </ItemGroup>
</Target>
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.