【发布时间】:2015-01-27 22:39:26
【问题描述】:
我有几个 C# 项目在某种意义上是一个单元。有几个常见的 AssemblyInfo 属性可以在它们之间共享(例如公司名称)。所以我制作了一个所有项目都包含的共享文件,包含(例如)AssemblyCompany:
[assembly: AssemblyCompany("Acme Inc.")]
我从每个项目的单个 AssemblyInfo.cs 中删除了相应的属性。
这一切都很好,但我想在一个案例中更进一步:版权。出版的第一年因项目而异,因此它们确实应该具有不同的版权字符串。所以我想在共享文件中做这样的事情:
[assembly: AssemblyCopyright(string.Format("Copyright {$0} Acme Inc.", Acme.AssemblyInfo.FirstPublicationYear)]
然后让每个单独的项目定义自己特定的Acme.AssemblyInfo.FirstPublicationYear。
我在黑暗中拍摄了几张不同的照片。首先,我只是尝试在项目的 AssemblyInfo.cs 中的静态类中定义一个 const:
namespace Acme
{
public static class AssemblyInfo
{
public const int FirstPublicationYear = 2015;
}
}
这会导致错误“属性参数必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式”。所以我尝试制作一个属性类:
namespace Acme
{
using System;
[AttributeUsage(AttributeTargets.Assembly)]
public class FirstPublicationYearAttribute : Attribute
{
private int year;
public FirstPublicationYearAttribute(int year)
{
this.year = year;
}
}
}
将该属性添加到单个项目的 AssemblyInfo.cs:
[assembly: Acme.FirstPublicationYear(2015)]
但我不确定如何(或者即使我可以)适当地更改共享属性文件中的AssemblyCopyright 行。我尝试了几种没有奏效的方法。第一:
[assembly: AssemblyCopyright(string.Format("Copyright © {$0} Acme, Inc.", Acme.FirstPublicationYear))]
...告诉我FirstPublicationYear 不存在于命名空间Acme 中。所以我想也许我会让它看起来更像一个属性:
[assembly: AssemblyCopyright(string.Format("Copyright © {$0} Acme, Inc.", [assembly: Acme.FirstPublicationYear]))]
...它告诉我“无效的表达式术语'['”。
有没有办法完成我在这里尝试做的事情?谢谢。
【问题讨论】:
标签: c# templates assemblyinfo