我有一个多项目的解决方案.我试图通过链接一个解决方案范围的程序集信息文件来优化AssemblyInfo.cs文件.这样做的最佳做法是什么?哪些属性应该在解决方案范围的文件中,哪些属于项目/程序集特定?
编辑:如果您有兴趣,有一个后续问题AssemblyVersion,AssemblyFileVersion和AssemblyInformationalVersion之间有什么区别?
我们使用名为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:
在项目的上下文菜单中选择Add/Existing Item ....
选择GlobalAssemblyInfo.cs
单击右侧的小向下箭头展开"添加"按钮
在按钮下拉列表中选择"添加为链接"
就我而言,我们正在构建一个产品,我们有一个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都内置于每个程序集中.这为我们提供了两个世界中最好的东西,您可能希望为所有项目提供一些共同属性,为其他项目提供特定值.
希望有所帮助.
@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"值.
MSBuild社区任务包含一个名为AssemblyInfo的自定义任务,您可以使用它来生成assemblyinfo.cs.它需要对您的csproj文件进行一些手动编辑才能使用,但这是值得的.
在我看来,使用GlobalAssemblyInfo.cs比它的价值更麻烦,因为你需要修改每个项目文件并记住修改每个新项目,而默认情况下你得到一个AssemblyInfo.cs.
对于全球价值观的变化(即公司,产品等),变化通常很少且易于管理我不认为DRY应该是一个考虑因素.如果要手动将所有项目中的值更改为一次性,只需运行以下MSBuild脚本(取决于MSBuild扩展包):