首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式更改AssemblyVersion和AssemblyFileVersion属性

以编程方式更改AssemblyVersion和AssemblyFileVersion属性
EN

Stack Overflow用户
提问于 2009-10-11 09:18:10
回答 4查看 13.7K关注 0票数 9

在设置创建过程中,我计划执行以下操作(在C#脚本中):

  1. 读取一个DLL的AssemblyVersionAssemblyFileVersion属性值。
  2. 迭代项目中的所有DLL和可执行文件,并将这些版本应用于它们的AssemblyVersionAssemblyFileVersion属性值。

现在的问题是:如何做第2步?

我可以成功地完成步骤1,但是对于步骤2,我看不到真正的起点。我可能要做的是使用一些本机P/Invoke方法,因为这些属性直接修改DLL/可执行文件的版本信息资源信息。

有什么线索吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-11 09:20:09

为什么不在构建过程中读取一个DLL的AssemblyVersionAssemblyFileVersion,并将其保存回其他csproject的AssemblyInfo.cs,然后编译它呢?

事实上,我不知道是否有可能直接修改DLL文件,而不求助于一些奇怪的东西。

或者,确保您的所有DLL共享一个公共的AssemblyInfo.cs。您可以通过在csproject中添加一个新项时将AssemblyInfo.cs添加为“adding”来做到这一点。这样,当您进行编译时,所有DLL都将共享相同的AssemblyInfo.cs,从而输出相同的AssemblyVersion

票数 13
EN

Stack Overflow用户

发布于 2016-10-11 17:48:06

在我的例子中,我创建了一个T4模板来更改AssemblyVersion和AssemblyFileVersion。我调用了模板Assembly.tt,并使它成为一个链接文件(当您添加它时,选择add,而不是Add)。我的所有程序集都拉入链接的Assembly.tt文件。

然后,您可以从一个位置运行T4模板,它将更新所有的AssemblyVersion和AssemblyFileVersions。您不需要调用文件AssemblyInfo.cs就可以将信息拖到dlls中。

Assembly.tt文件的代码是:

代码语言:javascript
复制
<#@ template language="C#" hostspecific="true" #>
// 
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
// 

using System.Reflection;

[assembly: AssemblyVersion("4.<#= this.RevisionYear #>.<#= this.RevisionNumber #>.<#= this.RevisionTime #>")]
[assembly: AssemblyFileVersion("4.<#= this.RevisionYear #>.<#= this.RevisionNumber #>.<#= this.RevisionTime #>")]
<#+
    int RevisionYear = DateTime.UtcNow.Year;
    int RevisionNumber = (int)(DateTime.UtcNow - new DateTime(DateTime.UtcNow.Year,1,1)).TotalDays;
    int RevisionTime = (int)(DateTime.UtcNow - new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day)).TotalMinutes;
#>

上面的T4模板的输出如下:

代码语言:javascript
复制
// 
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
// 

using System.Reflection;

[assembly: AssemblyVersion("4.2016.284.1066")]
[assembly: AssemblyFileVersion("4.2016.284.1066")]
票数 4
EN

Stack Overflow用户

发布于 2009-10-11 09:31:25

如果您有访问源的权限,请使用Graviton的建议

如果你不这么做,你可能有麻烦了。可能你可以用ILDASM拆装,也可以用ILASM重新组装。但是对于强名称的程序集来说,这是行不通的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1550249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档