我搜索了自动递增版本号并找到了一些解决方案,但我想知道哪一个是最有效和最新的方式?我不知道Visual Studio 2012上是否有新功能或工具。
第一: 更改AssemblyInfo.cs文件
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]
第二: codeplex(我不知道它是否与VS2012兼容)
第三: 发布
下的项目属性
第四: Using T4 templates to manage assembly version information
请建议任何其他解决方案或分享您关于版本控制的经验?
答案 0 :(得分:0)
下载并安装AssemblyInfoTask 您需要获得此自定义构建任务。 Chris引用gotdotnet.com上的原始资源,该资源不再存在。使用谷歌搜索文本AssemblyInfoTaskvers或尝试此链接 http://code.msdn.microsoft.com/AssemblyInfoTaskvers/Release/ProjectReleases.aspx?ReleaseId=232
它应该将您重定向到MSDN上的下载区域,您可以在其中获得lates安装版本。
将任务导入您的构建项目 在Visual Studio中打开源代码管理,并确保在工作区中拥有构建项目的本地副本。然后查看TFSBuild.proj文件(未更改,保留任何现有锁)并将其打开。导入Microsoft.TeamFoundation.Build.targets后立即添加以下行:
<Import Project="$(MSBuildExtensionsPath)¥Microsoft¥AssemblyInfoTask¥Microsoft.VersionNumber.Targets"/>
使用自定义任务检索修订号 每个buildnumber都包含一个修订版:FooBar_20090128.3我们要做的是使用此修订版号作为我们的Assembly版本中的修订版。因此,我们需要实现一个自定义构建任务,该任务能够从构建编号中提取修订号,以便我们可以将其分配给Assembly的修订号。在本文结尾处,我将发布您需要的资源。 在上面的import语句之后,通过添加以下行来注册此自定义构建任务:
<UsingTask TaskName="ExtractRevision.ExtractRevisionTask" AssemblyFile="ExtractRevision.dll"/>
要分别配置所有程序集属性并格式化数字格式,请将以下行添加到项目文件中:
<PropertyGroup>
<!– Assembly version properties. Add others here –>
<AssemblyMajorVersion>4</AssemblyMajorVersion>
<AssemblyMinorVersion>0</AssemblyMinorVersion>
<AssemblyBuildNumber>0</AssemblyBuildNumber>
<AssemblyRevision>0</AssemblyRevision>
<AssemblyFileMajorVersion>4</AssemblyFileMajorVersion>
<AssemblyFileMinorVersion>0</AssemblyFileMinorVersion>
<AssemblyFileBuildNumber>0</AssemblyFileBuildNumber>
<AssemblyFileRevision>0</AssemblyFileRevision>
<AssemblyBuildNumberType>DateString</AssemblyBuildNumberType>
<AssemblyBuildNumberFormat>MMdd</AssemblyBuildNumberFormat>
<AssemblyRevisionType>NoIncrement</AssemblyRevisionType>
<AssemblyRevisionFormat>0</AssemblyRevisionFormat>
<AssemblyFileBuildNumberType>DateString</AssemblyFileBuildNumberType>
<AssemblyFileBuildNumberFormat>MMdd</AssemblyFileBuildNumberFormat>
<AssemblyFileRevisionType>NoIncrement</AssemblyFileRevisionType>
<AssemblyFileRevisionFormat>0</AssemblyFileRevisionFormat>
<!– Dump the TFS BuildNumber to the Assembly Comment Prop –>
<AssemblyDescription>$(BuildNumber)</AssemblyDescription>
<!– TF.exe –>
<TF>"$(TeamBuildRefPath)¥..¥tf.exe"</TF>
<!– AssemblyInfo file –>
<AssemblyInfoSpec>AssemblyInfo.*</AssemblyInfoSpec>
</PropertyGroup>
设置修订号 通过更改目标CheckSettingsForEndToEndIteration,您可以使用尚未实现的自定义生成任务从buildbumber中提取修订版号并将其添加到程序集版本:
<!–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>
检出并返回工作区中的所有AssemblyInfo。[cs | vb]文件 在您更改AssemblyInfo文件之前,您需要让Team Build检查它们:
<!– Set the AssemblyInfoFiles items dynamically –>
<CreateItem Include="$(SolutionRoot)¥**¥$(AssemblyInfoSpec)">
<Output ItemName="AssemblyInfoFiles" TaskParameter="Include" />
</CreateItem>
<Message Text="These AssemblyInfo.* files were found:"/>
<Message Text ="@(AssemblyInfoFiles)"/>
<Exec WorkingDirectory="$(SolutionRoot)"
Command="$(TF) checkout "@(AssemblyInfoFiles, '" "')""/>
在编译更改的文件之后,您可以重新检入它们:
Command="$(TF) checkin /comment:"Auto-Build: Version Update" /noprompt /override:"Auto-Build: Version Update" "@(AssemblyInfoFiles, '" "')""/>
万一发生任何不良事件,有一种方法可以撤消更改:
<!– In case of Build failure, the AfterCompile target is not executed. Undo the changes –>
<Target Name="BeforeOnBuildBreak" Condition="'$(IsDesktopBuild)'!='true'">
<Exec WorkingDirectory="$(SolutionRoot)"
Command="$(TF) undo /noprompt "@(AssemblyInfoFiles, '" "')""/>
</Target>
实施ExtractRevision自定义构建任务 只需使用以下类创建一个新的C#库项目(并通过在项目属性中对其添加一个强名称): 名称空间ExtractRevision { 使用Microsoft.Build.Framework; 使用Microsoft.Build.Utilities;
public class ExtractRevisionTask : Task
{
public override bool Execute()
{
int indexOfDot = buildNumber.LastIndexOf(".");
if (indexOfDot != -1 & indexOfDot != buildNumber.Length – 1)
{
buildRevision = buildNumber.Substring(indexOfDot + 1, buildNumber.Length – (indexOfDot + 1));
}
else
{
//there is no char following the dot or we can't find a dot
buildRevision = "0″;
}
return true;
}
private string buildRevision;
private string buildNumber;
public string BuildNumber
{
set { buildNumber = value; }
}
[Output]
public string BuildRevision
{
get { return buildRevision; }
}
}
}
您需要将.dll文件直接签入TFS上的TeamBuildTypes文件夹。
外部链接:http://devsid.blogspot.in/2010/06/automatically-increment-assemblys.html