2008-09-15 60 views

回答

194

我们使用名为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
  • 展开通过点击那个小向下箭头右手
  • 选择Add-按钮“添加链接”中的按钮下拉列表
+0

保留旧的AssemblyInfo.cs文件的目的是什么?当我在GlobalAssemblyInfo.cs中自动生成版本标记时,如何更新我的解决方案中的AssemblyInfo.cs文件? – D3vtr0n 2011-03-22 17:09:17

1

使用多个项目的单个AseemblyInfo.cs文件不推荐。 AssemblyInfo文件包含的信息可能仅与特定程序集相关。两个最明显的信息是AssemblyTitleAssemblyVersion

更好的解决方案可能是使用由MSBuild处理的targets文件,以便将“assembly”属性“注入”到多个项目中。

+0

如果您有20多个项目,该怎么办?这就要求我在构建配置中维护20多个条目,仅用于版本控制。这似乎真的很蹩脚。如果我添加2个或3个新项目会怎样?这肯定会打破构建过程...任何想法如何解决? – D3vtr0n 2011-03-22 20:43:55

+0

@ D3vtr0n我认为这个想法是动态生成关联程序集,而不是为每个项目维护个别配置。我认为,社区任务处理这种情况。 – Roman 2013-01-23 20:50:25

15

就我而言,我们正在构建一个产品,我们拥有一个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都内置到每个程序集中。这给了我们两全其美的世界,您可能想要为所有项目设定一些共同属性,并为其他项目设定特定的值。

希望有所帮助。

8

MSBuild Community Tasks包含一个名为AssemblyInfo的自定义任务,您可以使用该任务来生成您的assemblyinfo.cs。它需要手动编辑你的csproj文件来使用,但是值得。

12

@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”值。

4

在我看来,使用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> 
1

有一件事我发现有用的是产生的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如果您使用此选项。

相关问题