views:

1350

answers:

8

I want to create a build number which looks like Major.minor.Date.LastChangeSetInTFS, the problem is how to get last changeset number from the TFS. Is there any property, or something??

+1  A: 

According to a comment on this page you can use the command line tf changeset /latest /i but I can't verify that from home.

Stuart Dunkeld
A: 

Check out following extension projects. You'll find about 5 different ways to solve your problem.

  • MSBuild Extension Pack - actively maintained, this extension provides over 280 tasks
  • MSBuild Community Tasks Project - not maintained since 2007, this set of ~90 tasks still has a few unique tasks, namely the flat-file-based Version task
  • SDC Tasks Library - not maintained since Aug 2008, this extension have been absorbed into MSBuild Extension Pack. If there's something you can't find in MSBuild Extension Pack, check this one out, with its portfolio of 300+ tasks chances are, it may have what you need.
zvolkov
+1  A: 

This has already been answered, have a look at:

http://stackoverflow.com/questions/545566/aligning-assembly-version-numbers-with-tfs-buildnumber

Burt
A: 

Well that's not what I want, You're adding $(BuildNumber) to assembly info, but I want to add last changeset checked in TFS as a part of build number. Running tf changeset /latest /i get the last changeset for whole TFS, not the last changeset for My project. BTW how to pass this echo into msbuild script?

Leszek Wachowicz
A: 
Leszek Wachowicz
A: 

I've found what I want on http://richardsbraindump.blogspot.com/2007/07/versioning-builds-with-tfs-and-msbuild.html

But now I have problem with tfsversion LocalPath property, when I set it to $(SolutionRoot) I get the error message: "The local path <...> is not associated with the workspace", when I change it to TFS mapped path I get the same error. Maybe someone had the same problem. (Sorry for dabbled posts but sth cut my last one in half)

Leszek Wachowicz
+2  A: 

OK finally I've found a solution. Here's a task that will provide you the latest changeset number and create a property to insert it in an Assembly info build number. The main problem was in the missing TfsLibraryLocation property (without it, it should be pointing to libraries in GAC, but it didn't)

<Target Name="GetVersionChangeSet">
<TfsVersion
  TfsLibraryLocation="C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies"      
  LocalPath="$(SolutionRoot)">
  <Output TaskParameter="Changeset" PropertyName="ChangesetNumber"/>
</TfsVersion>
<Message Text="TFS ChangeSetNumber: $(ChangesetNumber)" />

Leszek Wachowicz
A: 

Sorry, I cannot comment on the latest answer.

The TfsVersion task in the form you provided will only give you the latest changeset number in the $(SolutionRoot).

If you have something newer in $(SolutionRoot)\subdir, the provided solution will not work, as it will give you the latest from the $(SolutionRoot), not from $(SolutionRoot)\subdir as you would have wanted.

I use the tf changeset /latest /i and it works fine for me.

Zbigniew Kawalec