在装配信息中动态显示当前年份

Sha*_*500 11 c# vb.net

如何在AssemblyInfo文件中设置当前年份?

我用了

而不是这个:

<Assembly: AssemblyCopyright("Copyright 2012, Company Name.")> 
Run Code Online (Sandbox Code Playgroud)

试过这个:

<Assembly: AssemblyCopyright("Copyright" + DateTime.Now.Year.ToString() + ", Company Name.")> 
Run Code Online (Sandbox Code Playgroud)

我得到无效的常量错误.

我不想使用注册表项,这样做的最佳方法是什么?(这样当用户右键单击EXE并查找汇编信息时可以看到当前年份).

谢谢.

小智 24

我在另一篇文章(/sf/answers/57904661/)上看到了一些在这里真有用的内容.

试试这个.

将新文件添加到源存储库中解决方案中所有项目通用的某个位置.调用类似AssemblyCopyright.tt的文件

在文件中,为c#添加以下代码

<#@ template language="C#" #>
using System;
using System.Reflection;

[assembly: AssemblyCopyright("Copyright © CompanyName <#=DateTime.Now.Year#>")]
Run Code Online (Sandbox Code Playgroud)

或者vb

<#@ template language="VB" #>
<#@ output extension=".vb" #>
Imports System
Imports System.Reflection

<Assembly: AssemblyCopyright("Copyright © CompanyName <#=DateTime.Now.Year#>")> 
Run Code Online (Sandbox Code Playgroud)

然后,从每个AssemblyInfo.cs文件中删除AssemblyCopyright属性.

最后,为每个项目添加一个AssemblyCopyright.tt文件的链接.

模板文件将在每个构建时使用正确的年份重新创建一个新的AssemblyCopyright.cs文件.


Ada*_*dam 9

尝试这个:

\n
<Assembly: AssemblyCopyright("Copyright $([System.DateTime]::Now.ToString(\'yyyy\')), Company Name.")> \n
Run Code Online (Sandbox Code Playgroud)\n

我还没有具体尝试过这个。由于我使用此答案WriteCodeFragment中所述的.csproj 定义了程序集信息的其他部分,所以我也这样做 - 我定义属性

\n
  <!-- We started in 2021.  So, if it\'s still 2021 we just want to show \'2021\' -->\n  <PropertyGroup Condition="$([System.DateTime]::Now.ToString(\'yyyy\')) == \'2021\'">\n    <CopyrightYears>2021</CopyrightYears>\n  </PropertyGroup>\n  <!-- But for later years we want a range.  E.g. in 2023 it will show \'2021 - 2023\' -->\n  <PropertyGroup Condition="$([System.DateTime]::Now.ToString(\'yyyy\')) != \'2021\'">\n    <CopyrightYears>2021 - $([System.DateTime]::Now.ToString(\'yyyy\'))</CopyrightYears>\n  </PropertyGroup>\n
Run Code Online (Sandbox Code Playgroud)\n

然后,在更新程序集信息的任务中,我有一个ItemGroup包括

\n
<AssemblyAttributes Include="AssemblyCopyright">\n  <_Parameter1>"Copyright \xc2\xa9 $(CopyrightYears) ..."</_Parameter1>\n</AssemblyAttributes>\n
Run Code Online (Sandbox Code Playgroud)\n

之后ItemGroup我在该任务中有以下内容

\n
    <MakeDir Directories="$(IntermediateOutputPath)" />\n    <WriteCodeFragment Language="C#"\n                         OutputFile="$(IntermediateOutputPath)Version.cs"\n                         AssemblyAttributes="@(AssemblyAttributes)" />\n    <ItemGroup>\n        <Compile Include="$(IntermediateOutputPath)Version.cs" />\n    </ItemGroup>\n
Run Code Online (Sandbox Code Playgroud)\n

您可以用作属性的函数记录在此处

\n

  • 此解决方案也适用于具有自动生成的 AssemblyInfo 的新 SDK 样式 csproj。只需在项目文件的第一个“PropertyGroup”中添加“&lt;Copyright&gt;Copyright $([System.DateTime]::Now.ToString('yyyy')), Company Name&lt;/Copyright&gt;”即可。 (2认同)

Blu*_*ict 2

最好的方法可能是使用NAntMSBuild 等工具将其集成到您的构建过程中。

以下文章解释了如何使用 MSBuild 更改 AssemblyInfo:使用版本号更新程序集