Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 如何在VS 2012上自动增加项目版本号_C# 4.0_Visual Studio 2012 - Fatal编程技术网

C# 4.0 如何在VS 2012上自动增加项目版本号

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

我搜索了自动递增版本号并找到了一些解决方案,但我想知道哪一种是最有效和最新的方法?我不知道Visual Studio 2012上是否有新功能或工具

第一: 更改AssemblyInfo.cs文件

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]
第二: (我不知道它在VS2012上是否兼容)

第三: 正在发布的项目属性

第四:

请推荐其他解决方案或分享您关于版本控制的经验

  • 下载并安装AssemblyInfoTask 您需要获取此自定义生成任务。Chris引用了gotdotnet.com上不再存在的原始来源。使用google搜索文本AssemblyInfoTaskvers或尝试此链接

    它应该将您重定向到MSDN上的下载区域,在那里您可以获得最新的安装版本

  • 将任务导入到生成项目中 在VisualStudio中进行开源控制,并确保您的工作区中有生成项目的本地副本。然后签出TFSBuild.proj文件(未更改,保留任何现有锁)并打开它。在导入Microsoft.TeamFoundation.Build.targets之后添加以下行:

    <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 &quot;@(AssemblyInfoFiles, '&quot; &quot;')&quot;"/>
      </Target>
    
  • 您需要将.dll文件直接签入TFS上的TeamBuildTypes文件夹


    外部链接:

    您应该阅读,特别是提供链接上下文的部分。太好了,因此指南导致了剽窃。回溯机有时可能比总是在答案中包含(转述)内容更好。
    <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>&quot;$(TeamBuildRefPath)¥..¥tf.exe&quot;</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 &quot;@(AssemblyInfoFiles, '&quot; &quot;')&quot;"/>
    
    Command="$(TF) checkin /comment:&quot;Auto-Build: Version Update&quot; /noprompt /override:&quot;Auto-Build: Version Update&quot; &quot;@(AssemblyInfoFiles, '&quot; &quot;')&quot;"/>
    
    <!– 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 &quot;@(AssemblyInfoFiles, '&quot; &quot;')&quot;"/>
      </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; }
        }
        }
    }