如何使用发布日期作为.net项目的程序集版本?

All*_*ang 5 .net c#

我知道汇编版本的格式是:

<major version>.<minor version>.<build number>.<revision>
Run Code Online (Sandbox Code Playgroud)

有没有办法让版本号成为当前日期?

例如,如果我今天编译构建版本,版本号应如下所示:

2016.02.11.xxxxx
Run Code Online (Sandbox Code Playgroud)

如果将程序集版本设置为1.0.0,则通常会获得xxxxx.*.

我用Google搜索,但没有找到答案(甚至不是问题).

A87*_*876 5

简单部分:在“项目属性”>“构建事件”中,添加“预构建事件命令行”,如下所示:

\n\n
"D:\\SomePath\\MyAssemblyInfoPatcher.exe" "$(ProjectDir)Properties\\AssemblyInfo.cs"\n
Run Code Online (Sandbox Code Playgroud)\n\n

困难的部分: 提供 MyAssemblyInfoPatcher.exe ,一个打开由第一个参数指定的文件的程序,在其中搜索这一行(忽略那里的值):

\n\n
[assembly: AssemblyVersion("8888.0.*")]\n
Run Code Online (Sandbox Code Playgroud)\n\n

,用以下之一(或类似的)替换该行:

\n\n
[assembly: AssemblyVersion("2016.11.05.2359")]\n[assembly: AssemblyVersion("2016.1105.2359.1")]\n[assembly: AssemblyVersion("8888.2016.1105.2359")]\n
Run Code Online (Sandbox Code Playgroud)\n\n

,并重写该文件。

\n\n

该程序根据以下模式之一从系统日期和时间导出这些值:

\n\n
yyyy.mm.dd.hhmm\nyyyy.mmdd.hhmm.counter\narbitrary.yyyy.mmdd.hhmm\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您硬编码所需的模式,则您的程序无需配置。对于计数器(如果您选择了它),程序可以增加它在文件中找到的值。计数器必须是字 (UInt16),以便递增 65535 环绕到 0。如果您希望计数器每天重置,现在您需要将参考日期存储在辅助文件中或可能在 AssemblyInfo.cs 内的注释中。对于任意数字,您可以重复使用文件中的内容,或硬编码替换。

\n\n

时间问题:夏令时的开始和结束使当地时间偶尔会提前一小时(不是问题)并回落一小时(总是令人担心)。为了几乎保证没有重复的时间范围,您可以使用 UTC 或本地时间,但忽略夏令时。没有夏令时的本地时间是许多 Web 服务器使用的折衷方案,甚至是 VS 内置的可选的基于日期的自动版本编号(它用 ab{自 2000 年 1 月 1 日 00:00 开始的天数}覆盖ab*。{自 2000 年 1 月 1 日 00:00 起的秒数除以 2},因此人类不可读)。

\n\n

可能的简化: \xe2\x80\xa2 目标文件名始终是“AssemblyInfo.cs”,因此可以在程序中指定它并从参数中省略:“$(ProjectDir)Properties”。\xe2\x80\xa2如果VS 执行程序时当前目录设置为“D:\\Users\\myusername\\Documents\\Visual Studio 2010\\Projects\\solutionfolder\\projectfolder\\Properties”,则不会不需要争论。

\n\n

\xe2\x80\xa2A 程序可以通过 System.Reflection.Assembly.GetExecutingAssembly().GetName().Version 读取其 AssemblyVersion 。
\n\xe2\x80\xa2File:属性显示 AssemblyFileVersion。
\n\xe2\x80\xa2AssemblyFileVersion (如果未指定)默认为 AssemblyVersion 。

\n


小智 2

这可以通过 MSBUILD 来完成。这里有一个很好的描述。为此,您不需要构建服务器。您可以在项目的 BeforeBuild Target 中调用自定义 MSBUILD 目标。为此,使用编辑器打开您的 csproj 文件并在文件末尾找到此部分:

<!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
Run Code Online (Sandbox Code Playgroud)