2013-06-27 21 views
1

我们现在正在开发Windows 8 Metro应用程序,并且正确设置它以在每次登记到我们的暂存分支时创建新的ARM和x86应用程序包。如何从TFS自动增加Team Builds上的Windows Store软件包版本?

但是,问题是程序包创建过程不断给它一个1.0.0.0的版本。这使得软件包无法安装到已安装应用程序的平板电脑和计算机上,因为它发现它安装的是相同版本,但实际应用程序不同。

我尝试设置AssemblyVersion1.0.*,但由于程序集版本和软件包版本是完全不同的(这很烂),我怎样才能得到TFS团队生成自动设置上建立这样的新软件包版本构建可安装在Windows 8系统?

回答

1

我不熟悉Win 8应用程序,但设置程序集版本应该与正常.Net相同。我们每次都在我们的版本中设置版本,而版本与用于版本的实际变更集相同。这样,如果有人在Project Collection中检入任何东西,它将自动增加。 第一步是让变更号码,并设置其它版本:

<PropertyGroup> 
<incMajorVersion>6</incMajorVersion> 
<incMinorVersion>1</incMinorVersion> 
<incBuildNumber>3</incBuildNumber> 
<incRevision>$(SourceGetVersion.Replace("C",""))</incRevision> 
</PropertyGroup> 

下一步就是要找到汇编文件,并修改版本,到指定的。为此,从Extensionpack使用MSBuild任务(http://www.msbuildextensionpack.com/help/4.0.5.0/Index.html)。现在我们必须导入任务文件,找到汇编文件并更改它们。这需要在发生任何事情之前完成,因此我们覆盖AfterGet目标:

<Import Project="C:\Program Files (x86)\MSBuild\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks"/> 

<Target Name="AfterGet" DependsOnTargets="$(AfterGetDependsOn)"> 
<ItemGroup> 
    <AssemblyInfoFiles Include="$(BuildDirectory)\**\AssemblyInfo.cs"/> 
</ItemGroup> 

<MSBuild.ExtensionPack.Framework.AssemblyInfo 
    AssemblyInfoFiles="@(AssemblyInfoFiles)" 
    AssemblyMajorVersion="$(incMajorVersion)" 
    AssemblyMinorVersion="$(incMinorVersion)" 
    AssemblyBuildNumber="$(incBuildNumber)" 
    AssemblyRevision="$(incRevision)" 
    AssemblyFileMajorVersion="$(incMajorVersion)" 
    AssemblyFileMinorVersion="$(incMinorVersion)" 
    AssemblyFileBuildNumber="$(incBuildNumber)" 
    AssemblyFileRevision="$(incRevision)" /> 
</Target> 

现在输出文件应该有您定义的版本号。

+0

noob问题:在哪个文件中给你指定这个? – sLedgem

+0

您需要在MSBuild项目文件(例如TFSBuild.proj)中定义它。我不使用这些XAML样式的构建过程,但是如果使用它们,则应该可以在get后面插入execute命令,该命令使用AssemblyUpdate调用MSBuild。 – MikeR

+0

不幸的是,软件包版本与程序集版本完全分开:(。WinRT应用程序有两个版本,这是迟缓的,而对于Windows存储和安装目的,所有它关心的是软件包版本而不是程序集版本。版本化我们的非Winrt应用程序,所以谢谢! – KallDrexx