Letztes Jahr hatte ich dieses Thema für TFS2005 hier behandelt.
Mit TFS2008 hat sich aber in MSBuild einiges geändert, so dass man kleinere Änderungen vornehmen muss, um den Pattern auch mit TFS 2008 nativ verwenden zu können.

Hintergrund ist, dass die ColumnName class deprecated wurde, welche das von mir verwendete Field BuildNumber bereitgestellt hat:

[ObsoleteAttribute("This class has been deprecated. Please remove all references.")]
public static class ColumnName

Im TFSBuild.proj muss man den GetBuildPropertiesTask verwenden, um an die BuildNumber zu kommen.
Hier ein Snip mit den nötigen Änderungen, die das TFSBuild.proj File aus dem oben referenzierten Eintrag ergänzen:


<Target Name="CheckSettingsForEndToEndIteration">

<!--for 2008 use the GetBuildProperties Task to get the BuildNumber -->
    <GetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)">
      <Output TaskParameter="BuildNumber" PropertyName="BuildNumber"></Output>
    </GetBuildProperties>

<!--  extract the BuildRevision -->
    <ExtractRevisionTask BuildNumber="$(BuildNumber)">
      <Output TaskParameter="BuildRevision" PropertyName="BuildRevision" />
    </ExtractRevisionTask>

<!--  update the AssemblyInfo Props -->
    <CreateProperty Value="$(BuildRevision)">
      <Output TaskParameter="Value" PropertyName="AssemblyRevision"/>
    </CreateProperty>
    <CreateProperty Value="$(BuildRevision)">
      <Output TaskParameter="Value" PropertyName="AssemblyFileRevision"/>
    </CreateProperty>

<!--  just needed if you populate the AssemblyDescription  too like in the sample  -->
    <CreateProperty Value="$(BuildNumber)">
      <Output TaskParameter="Value" PropertyName="AssemblyDescription"/>
    </CreateProperty>

</Target>

Das wars damit funktioniert es auch mit TFS2008.

Viel Spass

Chris