使用程序集属性的最佳实践是什么?
我有多个项目的解决方案。我正在尝试通过链接一个解决方案范围的程序集信息文件来优化AssemblyInfo.cs文件。最佳做法是什么?哪些属性应该在解决方案范围的文件中,哪些是项目/程序集特定的?
编辑:如果我们有后续问题,AssemblyVersion,AssemblyFileVersion和AssemblyInformationalVersion之间有什么区别?
解决方案
回答
不建议将单个AseemblyInfo.cs文件用于多个项目。
AssemblyInfo文件包含可能仅与该特定程序集相关的信息。两条最明显的信息是" AssemblyTitle"和" AssemblyVersion"。
更好的解决方案可能是使用由MSBuild处理的"目标"文件,以便将程序集属性"注入"到多个项目中。
回答
我们正在使用一个名为GlobalAssemblyInfo.cs的全局文件和一个名为AssemblyInfo.cs的本地文件。全局文件包含以下属性:
[assembly: AssemblyProduct("Your Product Name")] [assembly: AssemblyCompany("Your Company")] [assembly: AssemblyCopyright("Copyright ? 2008 ...")] [assembly: AssemblyTrademark("Your Trademark - if applicable")] #if DEBUG [assembly: AssemblyConfiguration("Debug")] #else [assembly: AssemblyConfiguration("Release")] #endif [assembly: AssemblyVersion("This is set by build process")] [assembly: AssemblyFileVersion("This is set by build process")]
本地AssemblyInfo.cs包含以下属性:
[assembly: AssemblyTitle("Your assembly title")] [assembly: AssemblyDescription("Your assembly description")] [assembly: AssemblyCulture("The culture - if not neutral")] [assembly: ComVisible(true/false)] // unique id per assembly [assembly: Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]
我们可以使用以下过程添加GlobalAssemblyInfo.cs:
- 在项目的上下文菜单中选择添加/现有项目...
- 选择GlobalAssemblyInfo.cs
- 通过单击右侧的小向下箭头来展开"添加按钮"
- 在按钮下拉列表中选择"添加为链接"
回答
要在多个项目之间共享文件,可以添加现有文件作为链接。
为此,请添加一个现有文件,然后在文件选择器中单击"添加为链接"。添加为链接http://laurent.etiemble.free.fr/dotclear/images/AddLinkedFile03_tn.png
至于要放在共享文件中的内容,我建议我们放置将在程序集之间共享的内容。诸如版权,公司或者版本之类的东西。
回答
以我为例,我们正在为其构建一个具有Visual Studio解决方案的产品,并在其自己的项目中包含各种组件。共同的属性去了。在该解决方案中,大约有35个项目和一个公共程序集信息(CommonAssemblyInfo.cs),该信息具有以下属性:
[assembly: AssemblyCompany("Company")] [assembly: AssemblyProduct("Product Name")] [assembly: AssemblyCopyright("Copyright ? 2007 Company")] [assembly: AssemblyTrademark("Company")] //This shows up as Product Version in Windows Explorer //We make this the same for all files in a particular product version. And increment it globally for all projects. //We then use this as the Product Version in installers as well (for example built using Wix). [assembly: AssemblyInformationalVersion("0.9.2.0")]
其他属性,例如AssemblyTitle,AssemblyVersion等,我们根据每个程序集提供。生成程序集时,每个程序集都内置了AssemblyInfo.cs和CommonAssemblyInfo.cs。这使我们两全其美,我们可能希望对所有项目都具有一些共同的属性,而对另一些项目具有特定的价值。
希望能有所帮助。
回答
MSBuild社区任务包含一个名为AssemblyInfo的自定义任务,我们可以使用该任务来生成assemblyinfo.cs。它需要对csproj文件进行一些手动编辑才能使用,但这是值得的。
回答
@JRoppert提出的解决方案与我所做的几乎相同。唯一的区别是,我在本地AssemblyInfo.cs文件中放置了以下几行,因为它们随每个程序集的不同而不同:
#if DEBUG [assembly: AssemblyConfiguration("Debug")] #else [assembly: AssemblyConfiguration("Release")] #endif [assembly: AssemblyVersion("This is set by build process")] [assembly: AssemblyFileVersion("This is set by build process")] [assembly: CLSCompliant(true)]
我还(通常)针对每个解决方案使用一个通用的装配信息,并假设一个解决方案是单个产品线/可发布产品。通用程序集信息文件还具有:
[assembly: AssemblyInformationalVersion("0.9.2.0")]
它将设置Windows资源管理器显示的" ProductVersion"值。