我有多个项目的解决方案。我试图通过链接一个解决方案宽的程序集信息文件来优化AssemblyInfo.cs文件。这样做的最佳做法是什么?哪些属性应该在解决方案的宽文件中,哪些属于项目/程序集特定的?使用装配属性的最佳做法是什么?
编辑:如果你有兴趣有一个后续的问题What are differences between AssemblyVersion, AssemblyFileVersion and AssemblyInformationalVersion?
我有多个项目的解决方案。我试图通过链接一个解决方案宽的程序集信息文件来优化AssemblyInfo.cs文件。这样做的最佳做法是什么?哪些属性应该在解决方案的宽文件中,哪些属于项目/程序集特定的?使用装配属性的最佳做法是什么?
编辑:如果你有兴趣有一个后续的问题What are differences between AssemblyVersion, AssemblyFileVersion and 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选择添加/现有项目...在项目的上下文菜单中
使用多个项目的单个AseemblyInfo.cs文件不推荐。 AssemblyInfo文件包含的信息可能仅与特定程序集相关。两个最明显的信息是AssemblyTitle
和AssemblyVersion
。
更好的解决方案可能是使用由MSBuild处理的targets
文件,以便将“assembly”属性“注入”到多个项目中。
要共享的文件在多个项目之间,您可以将现有文件添加为链接。
为此,请添加现有文件,然后单击文件选择器中的“作为链接添加”。 Add As Link 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 Community Tasks包含一个名为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”值。
在我看来,使用GlobalAssemblyInfo.cs比它的价值更麻烦,因为您需要修改每个项目文件并记住修改每个新项目,而默认情况下会获得AssemblyInfo.cs。
对于全球价值(即公司,产品等)的变化,这些变化通常是非常少见和易于管理的,我认为DRY应该是一个考虑因素。只要运行下面的MSBuild脚本(取决于MSBuild Extension Pack)当您需要手动更改所有项目的值作为一次性的:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="UpdateAssemblyInfo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<AllAssemblyInfoFiles Include="..\**\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="MSBuild.ExtensionPack.tasks" />
<Target Name="UpdateAssemblyInfo">
<Message Text="%(AllAssemblyInfoFiles.FullPath)" />
<MSBuild.ExtensionPack.Framework.AssemblyInfo
AssemblyInfoFiles="@(AllAssemblyInfoFiles)"
AssemblyCompany="Company"
AssemblyProduct="Product"
AssemblyCopyright="Copyright"
... etc ...
/>
</Target>
</Project>
有一件事我发现有用的是产生的AssemblyVersion元素(等)通过在预构建阶段应用标记替换来实现。
我使用TortoiseSvn,很容易使用它的SubWCRev.exe
将模板AssemblyInfo.wcrev
变成AssemblyInfo.cs
。模板中的相关行可能如下所示:
[assembly: AssemblyVersion("2.3.$WCREV$.$WCMODS?1:0$$WCUNVER?1:0$")]
第三个元素是修订号。我使用第四个元素来检查我没有忘记提交任何新的或已更改的文件(如果全部都是OK,则第四个元素为00)。
顺便说一下,将AssemblyInfo.wcrev
添加到您的版本控制中,并且忽略AssemblyInfo.cs
如果您使用此选项。
保留旧的AssemblyInfo.cs文件的目的是什么?当我在GlobalAssemblyInfo.cs中自动生成版本标记时,如何更新我的解决方案中的AssemblyInfo.cs文件? – D3vtr0n 2011-03-22 17:09:17