如何在AssemblyInfo文件中设置当前年份?
我用过
而不是:
<Assembly: AssemblyCopyright("Copyright 2012, Company Name.")>
尝试了这个:
<Assembly: AssemblyCopyright("Copyright" + DateTime.Now.Year.ToString() + ", Company Name.")>
我得到无效的常量错误。
我不想使用注册表项,这样做的最佳方法是什么? (这样,当用户右键单击EXE&amp;查找汇编信息时,可以看到当前年份。)
感谢。
答案 0 :(得分:23)
我在其他帖子(https://stackoverflow.com/a/827209/857307)上看到了一些在这里真有帮助的内容。
试试这个。
将新文件添加到源存储库中,该解决方案中的所有项目都是通用的。调用类似AssemblyCopyright.tt
的文件在文件中,为c#
添加以下代码<#@ template language="C#" #>
using System;
using System.Reflection;
[assembly: AssemblyCopyright("Copyright © CompanyName <#=DateTime.Now.Year#>")]
或vb
<#@ template language="VB" #>
<#@ output extension=".vb" #>
Imports System
Imports System.Reflection
<Assembly: AssemblyCopyright("Copyright © CompanyName <#=DateTime.Now.Year#>")>
然后,从每个AssemblyInfo.cs文件中删除AssemblyCopyright属性。
最后,将AssemblyCopyright.tt文件的链接添加到每个项目中。
模板文件将在每个构建时使用正确的年份重新创建一个新的AssemblyCopyright.cs文件。
答案 1 :(得分:1)
可能最好的方法是使用NAnt或MSBuild等工具将其整合到您的构建过程中。
这篇文章解释了如何使用MSBuild更改AssemblyInfo: 正在更新Assemblies with A Version Number。
答案 2 :(得分:1)
您可以使用NANT / MSBuild任务来修改AssemblyInfo.cs文件,就像我们为每个构建更改每个程序集的版本一样。
有关详细信息,请访问http://msbuildtasks.tigris.org/
答案 3 :(得分:1)
通常,对于这种替换,您使用预构建步骤来调用自动生成assemblyInfo.cs文件的脚本。
您可以查看此主题:How can you find and replace text in a file using the Windows command-line environment?
答案 4 :(得分:0)
我有类似的问题,但对于新样式的csproj文件;包含文件版本信息。我在How to define current system date in post build event找到了一个很好的答案。奇怪的是,这是一个与我和OP问题有些不同的问题。但是,我认为对此的公认答案是我想要的。即,csproj文件中的$([System.DateTime] :: Now.Year)会计算为当年。
答案 5 :(得分:0)
试试这个:
<Assembly: AssemblyCopyright("Copyright $([System.DateTime]::Now.ToString('yyyy'), Company Name.")>
我还没有完全尝试过。由于我使用 this answer 中所述的 WriteCodeFragment
通过 .csproj 定义了程序集信息的其他一些部分,因此我也是这样做的 - 我定义了属性
<!-- We started in 2021. So, if it's still 2021 we just want to show '2021' -->
<PropertyGroup Condition="$([System.DateTime]::Now.ToString('yyyy')) == '2021'">
<CopyrightYears>2021</CopyrightYears>
</PropertyGroup>
<!-- But for later years we want a range. E.g. in 2023 it will show '2021 - 2023' -->
<PropertyGroup Condition="$([System.DateTime]::Now.ToString('yyyy')) != '2021'">
<CopyrightYears>2021 - $([System.DateTime]::Now.ToString('yyyy'))</CopyrightYears>
</PropertyGroup>
然后,在更新程序集信息的任务中,我有一个 ItemGroup
包括
<AssemblyAttributes Include="AssemblyCopyright">
<_Parameter1>"Copyright © $(CopyrightYears) ..."</_Parameter1>
</AssemblyAttributes>
在 ItemGroup
之后,我在该任务中执行以下操作
<MakeDir Directories="$(IntermediateOutputPath)" />
<WriteCodeFragment Language="C#"
OutputFile="$(IntermediateOutputPath)Version.cs"
AssemblyAttributes="@(AssemblyAttributes)" />
<ItemGroup>
<Compile Include="$(IntermediateOutputPath)Version.cs" />
</ItemGroup>
可以用作属性的函数已记录here