C# 4.0 如何在VS 2012上自动增加项目版本号
我搜索了自动递增版本号并找到了一些解决方案,但我想知道哪一种是最有效和最新的方法?我不知道Visual Studio 2012上是否有新功能或工具 第一: 更改AssemblyInfo.cs文件C# 4.0 如何在VS 2012上自动增加项目版本号,c#-4.0,visual-studio-2012,C# 4.0,Visual Studio 2012,我搜索了自动递增版本号并找到了一些解决方案,但我想知道哪一种是最有效和最新的方法?我不知道Visual Studio 2012上是否有新功能或工具 第一: 更改AssemblyInfo.cs文件 [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyFileVersion("1.0.*")] 第二: (我不知道它在VS2012上是否兼容) 第三: 正在发布的项目属性 第四: 请推荐其他解决方案或分享您关于版本控制的经验 下载并安装A
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]
第二:
(我不知道它在VS2012上是否兼容)
第三:
正在发布的项目属性
第四:
请推荐其他解决方案或分享您关于版本控制的经验
<Import Project="$(MSBuildExtensionsPath)¥Microsoft¥AssemblyInfoTask¥Microsoft.VersionNumber.Targets"/>
如果发生任何不好的情况,有一种方法可以撤消更改:
<!– 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>
外部链接:您应该阅读,特别是提供链接上下文的部分。太好了,因此指南导致了剽窃。回溯机有时可能比总是在答案中包含(转述)内容更好。
<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>
<!–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>
<!– 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>
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; }
}
}
}