如何动态更新的AssemblyInfo.cs价值(How to update the Value i

2019-08-06 06:55发布

我已经writen一个程序,它会从SVN仓库的价值。 现在我想更新与价值的AssemblyFileVersion。

由于我不能写内部AssemblyInfo.cs中的任何代码,我怎么会更新的AssemblyFileVersion的价值。

我想实现这样的事情

..........................
// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]

 SvnInfoEventArgs info;
                    Uri repoURI = new Uri("ServerAddress");
                    svnClient.GetInfo(repoURI, out info);


[assembly: AssemblyVersion("1.0.0.0")]
    [assembly: AssemblyFileVersion(String.Format("{0}.{1}.{2}. {3}",
                                          major,minor,build,info.Revision))]

Answer 1:

我假设你正试图在这里产生一些构建系统 - 所以基本上,你需要修改AssemblyInfo.cs文件与SVN号。

您可以创建MS建设任务是相同的:看http://florent.clairambault.fr/insert-svn-version-and-build-number-in-your-c-assemblyinfo-file

还有的是,也可以用于基于关键字替换($ WCREV $修订)命令行实用程序(SubWCRev) -在这里看到的例子: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev-example。 HTML

最后,你也许可以推出你的自定义代码(做正则表达式查找/替换)做同样的一些(包括我)所做的-在这里看到这样一个例子: http://www.codeproject.com/Articles/168528/自动-保大会,修订功能于同步与 。



Answer 2:

我使用的是基于Ant构建系统,并有有关更新的AssemblyInfo.cs类似的问题。

我的编译系统已经生成version.h中所有纳入在构建时其他项目文件。 对于C#,我决定用版本信息注入产生VersionInfo.csAssemblyInfo.cs中

AssemblyInfo.cs中 (设定一次指定VERSIONINFO常量)

using System.Reflection;
using System.Runtime.InteropServices;

[assembly: AssemblyCompany(VersionInfo.Company)]
[assembly: AssemblyProduct(VersionInfo.ProductName)]
[assembly: AssemblyCopyright(VersionInfo.Copyright)]

[assembly: Guid("12345678-1234-1234-1234-1234567890ab")]

[assembly: AssemblyVersion(VersionInfo.product.FileVersion)]
[assembly: AssemblyFileVersion(VersionInfo.sdk.FileVersion)]

VersionInfo.cs(动态地ant构建系统产生)

// Shared Product Version Header
// Automatically Generated: Sat, 2 May 2015 15:09:09 EDT
// ReSharper disable CheckNamespace
// ReSharper disable InconsistentNaming
internal struct VersionInfo
{
  public const string Company = @"My Company Corp";
  public const string Copyright = @"Copyright (c) 2015 My Company Corp.  All rights reserved.";
  public const string ProductName = @"My Software Service";
  public const string SpecialBuild = @"";
  public const string ProductConfiguration = @"";
  public const string ProductCode = @"MSS";
  public const string ProductUrl = @"www.MyCompany.com";
  public const string ProductEmail = @"support@MyCompany.com";
  public const string ProductVendor = @"My Company Corp";
  internal struct product
  {
    public const string FileVersion = @"1.5.0.240";
  }
  internal struct sdk
  {
    public const string FileVersion = @"1.4.5.222";
  }
  internal struct service
  {
    public const string FileVersion = @"1.3.2.142";
  }
}

version.xml(蚂蚁进口-剪断)

<echo file="${artifacts.dir}\VersionInfo.cs" append="false">// Shared Product Version Header${line.separator}</echo>
<echo file="${artifacts.dir}\VersionInfo.cs" append="true">// Automatically Generated: ${version.generated.time}${line.separator}</echo>
<echo file="${artifacts.dir}\VersionInfo.cs" append="true">// ReSharper disable CheckNamespace${line.separator}</echo>
<echo file="${artifacts.dir}\VersionInfo.cs" append="true">// ReSharper disable InconsistentNaming${line.separator}</echo>
<echo file="${artifacts.dir}\VersionInfo.cs" append="true">internal struct VersionInfo${line.separator}</echo>
<echo file="${artifacts.dir}\VersionInfo.cs" append="true">{${line.separator}</echo>
<echo file="${artifacts.dir}\VersionInfo.cs" append="true">  public const string Company = @"${product.company}";${line.separator}</echo>
<echo file="${artifacts.dir}\VersionInfo.cs" append="true">  public const string Copyright = @"${product.copyright}";${line.separator}</echo>
 <!-- other version info here -->
<echo file="${artifacts.dir}\VersionInfo.cs" append="true">}${line.separator}</echo>

version.properties(Ant属性文件中指定产品版本信息)

product.company=My Company Corp
product.copyright=Copyright (c) 2015 My Company Corp.  All rights reserved.
product.website=www.MyCompany.com
product.email=support@MyCompany.com
product.vendor=My Company Corp

product=1.5.0.240
service=1.3.2.142
sdk=1.4.5.222

C#预生成事件 (副本自动生成VersionInfo.cs项目属性目录)

@ECHO OFF
SETLOCAL
SET ARTDIR=$(ProjectDir)..\..\..\MySoftwareService\installer
SET VERCS=%ARTDIR%\VersionInfo.cs
ECHO Updating %VERCS%
xcopy /D /Y "%VERCS%" "$(ProjectDir)Properties"

MSBuild的扩展 (没有!)

<!-- none, not required -->

顺便说一句,我的版本的方案是:major.minor.revision.build这不是什么AssemblyInfo.cs文件指定。



Answer 3:

你需要在你的构建过程中做到这一点。

由于您使用的Visual Studio中,你已经在使用的MSBuild ,在这种情况下MSBuild扩展包有一个集信息的任务。

为了得到从Subversion修改,MSBuild扩展包已经得到了一个任务 ,以及。

或者,如果你使用的TeamCity持续集成(CI),它有一个“集信息补丁”构建功能。 我想,大多数其他CI系统都会有类似的东西。



文章来源: How to update the Value in Assemblyinfo.cs dynamically