c# - 使用Visual Studio时是否可以自动增加文件构建版本?




12 Answers

在Visual Studio 2008中,以下工作。

找到AssemblyInfo.cs文件并找到这两行:

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

您可以尝试将其更改为:

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]

但是这不会给你想要的结果,你将最终得到1.0。*的产品版本和1.0.0.0的文件版本。 不是你想要的!

但是,如果删除这些行中的第二行并且只有:

[assembly: AssemblyVersion("1.0.*")]

然后编译器将文件版本设置为等于产品版本,并且您将得到您想要的结果,即自动增加同步的产品和文件版本。 例如1.0.3266.92689

我只是想知道如何使用Visual Studio(2005) 自动增加我的文件的构建版本(和版本?)。

如果我查找说C:\Windows\notepad.exe的属性,版本选项卡给出“文件版本:5.1.2600.2180”。 我想在我的dll的版本中得到这些很酷的数字,而不是版本1.0.0.0,让我们面对它有点沉闷。

我尝试了一些东西,但它似乎不是开箱即用的功能,或者我只是在错误的地方寻找(像往常一样)。

我主要从事网络项目....

我看了两个:

  1. http://www.codeproject.com/KB/dotnet/Auto_Increment_Version.aspx
  2. http://www.codeproject.com/KB/dotnet/build_versioning.aspx

我无法相信这么做是很标准的做法。

编辑: 它不能在VS2005中工作,据我所知( http://www.codeproject.com/KB/dotnet/AutoIncrementVersion.aspx




在每个版本中更改版本号的另一种方法是使用MSBuild.Community.Tasks版本任务。 只需下载他们的安装程序,安装它,然后修改以下代码并将其粘贴到.csproj文件中的<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />之后:

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<Target Name="BeforeBuild">
    <Version VersionFile="Properties\version.txt" Major="1" Minor="0" BuildType="Automatic" StartDate="12/31/2009" RevisionType="BuildIncrement">
      <Output TaskParameter="Major" PropertyName="Major" />
      <Output TaskParameter="Minor" PropertyName="Minor" />
      <Output TaskParameter="Build" PropertyName="Build" />
      <Output TaskParameter="Revision" PropertyName="Revision" />
    </Version>
    <AssemblyInfo CodeLanguage="CS"
                  OutputFile="Properties\VersionInfo.cs"
                  AssemblyVersion="$(Major).$(Minor)"
                  AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)" />
</Target>

注意:将StartDate属性修改为您的语言环境。 它目前不使用不变文化。

对于2010年1月14日的第三次构建,这会创建一个包含以下内容的VersionInfo.cs

[assembly: AssemblyVersion("1.0")]
[assembly: AssemblyFileVersion("1.0.14.2")]

然后必须将该文件添加到项目中(通过添加现有项目 ),并且必须从AssemblyInfo.cs删除AssemblyVersionAssemblyFileVersion行。

$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.chmVersion Properties中描述了用于更改版本组件的不同算法。




安装生成版本增量加载项。 它给你比*选项更多的控制权。




在AssemblyInfo中的版本号或在其他帖子中描述的项目属性下设置*不适用于所有版本的Visual Studio / .NET。

Afaik它在VS 2005中不起作用(但在VS 2003和VS 2008中)。 对于VS 2005,您可以使用以下方法: http://www.codeproject.com/KB/dotnet/Auto_Increment_Version.aspx

但请注意,不建议对强名称程序集自动更改版本号。 原因在于,每次引用的程序集重新构建时,都必须更新对此程序集的所有引用,因为强名称的程序集引用始终是对特定程序集版本的引用。 只有在接口发生更改时,Microsoft自己才会更改.NET Framework程序集的版本号。 (注意:我仍在搜索MSDN中的链接,我阅读了该链接。)




有一个Visual Studio扩展自动版本支持Visual Studio 2012,2013,2015和2017。

屏幕截图







Cake支持AssemblyInfo文件修补。 随着蛋糕在手中,你有无限的方式来实现自动版本递增。

像C#编译器一样递增版本的简单例子是:

Setup(() =>
{
    // Executed BEFORE the first task.
    var datetimeNow = DateTime.Now;
    var daysPart = (datetimeNow - new DateTime(2000, 1, 1)).Days;
    var secondsPart = (long)datetimeNow.TimeOfDay.TotalSeconds/2;
    var assemblyInfo = new AssemblyInfoSettings
    {
        Version = "3.0.0.0",
        FileVersion = string.Format("3.0.{0}.{1}", daysPart, secondsPart)
    };
    CreateAssemblyInfo("MyProject/Properties/AssemblyInfo.cs", assemblyInfo);
});

这里:

  • 版本 - 是汇编版本。 最佳做法是锁定主版本号并保留零(例如“1.0.0.0”)。
  • FileVersion - 是汇编文件版本。

请注意,您不仅可以修补版本, 可以修补所有其他必要的信息




截至目前,就我的申请而言,

string ver = Application.ProductVersion;

返回ver = 1.0.3251.27860

值3251是自2000年1月1日以来的天数。 我用它在我的应用程序的启动画面上放置了一个版本创建日期。 在与用户打交道时,我可以询问比一些长号码更容易沟通的创建日期。

(我是一个支持小公司的单人部门,这种方法可能不适合你。)




如何获取版本{major}.{year}.1{date}.1{time}

这是一种实验,但我喜欢它。 受Jeff Atwood @ CodingHorror启发( link )。

生成的版本号变为1.2016.10709.11641 (意思是2016-07-09 16:41),允许

  • 穷人零填充(与愚蠢的领先1秒)
  • 嵌入到版本号中的近乎人类可读的本地 DateTime
  • 只留下主要版本才能进行真正的重大改变。

将一个新项目添加到项目中,选择General - > Text Template,将其命名为CustomVersionNumber并在适用的情况下将Properties/AssemblyInfo.csAssemblyVersionAssemblyFileVersion注释掉。

然后,在保存此文件或构建项目时,这将重新生成位于创建的.tt文件下的.tt文件。

<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>

//
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
//

using System.Reflection;

<#
    var date = DateTime.Now;
    int major = 1;
    int minor = date.Year;
    int build = 10000 + int.Parse(date.ToString("MMdd"));
    int revision = 10000 + int.Parse(date.ToString("HHmm"));
#>

[assembly: AssemblyVersion("<#= $"{major}.{minor}.{build}.{revision}" #>")]
[assembly: AssemblyFileVersion("<#= $"{major}.{minor}.{build}.{revision}" #>")]






也许回到这里已经太迟了,但希望能够解决某个人的忙碌问题。

使用PowerShell脚本自动更改所有项目的汇编版本的方法。 本文将解决您的许多问题。




我已经创建了一个应用程序来自动增加文件版本。

  1. 下载Application
  2. 将以下行添加到预生成事件命令行中

    C:\ temp \ IncrementFileVersion.exe $(SolutionDir)\ Properties \ AssemblyInfo.cs

  3. 建立该项目

为了简单起见,应用程序只会在出现错误时抛出消息,以确认它工作正常,您将需要检查'Assembly Information'中的文件版本

注意:您将不得不在Visual Studio中重新加载解决方案中的'Assembly Information'按钮以填充字段,但是您的输出文件将具有更新版本。

对于建议和请求,请发送电子邮件至[email protected]




Related