Uwe*_*eim 7 .net c# attributes versioninfo
在设置创建过程中,我计划执行以下操作(在C#脚本中):
AssemblyVersion和AssemblyFileVersion属性值.AssemblyVersion和AssemblyFileVersion属性值.现在的问题是:如何做第2步?
我成功地可以做第1步,但对于第2步,我没有看到真正的起点.我可能要做的是使用一些本机P/Invoke方法,因为属性直接修改DLL /可执行文件的版本信息资源信息.
有什么暗示吗?
Gra*_*ton 13
为什么不在构建过程中读取AssemblyVersion和AssemblyFileVersion解析一个DLL,并将其保存回其他csproject AssemblyInfo.cs,然后才编译它?
事实上,我不知道是否可以直接修改DLL文件,而不需要诉诸一些幻想.
或者,确保所有DLL共享一个公共AssemblyInfo.cs.您可以通过AssemblyInfo.cs在csproject中添加新项目时添加"添加为链接" 来执行此操作.通过这种方式进行编译时,所有DLL将共享相同的内容AssemblyInfo.cs,从而输出相同的内容AssemblyVersion.
小智 5
就我而言,我创建了一个 T4 模板来更改 AssemblyVersion 和 AssemblyFileVersion。我将模板命名为 Assembly.tt,并将其设为链接文件(添加它时选择“添加链接”,而不是“添加”)。我的所有程序集都会引入链接的 Assembly.tt 文件。
然后,您可以从一个位置运行 T4 模板,它将更新所有 AssemblyVersion 和 AssemblyFileVersions。您不必调用文件 AssemblyInfo.cs 即可将信息提取到 dll 中。
Assembly.tt 文件的代码是:
<#@ 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;
#>
Run Code Online (Sandbox Code Playgroud)
上面 T4 模板的输出将是:
//
// 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")]
Run Code Online (Sandbox Code Playgroud)