共享AssemblyInfo,用于整个解决方案的统一版本控制

时间:2011-07-21 05:37:47

标签: c# .net visual-studio visual-studio-2010 .net-assembly

我读过这个技巧:Shared assembly info in VS projects - JJameson's blog

基本上,它意味着创建一个SharedAssemblyInfo.cs,其中包含有关程序集的版本信息,并将此文件添加为解决方案的所有项目的链接,因此实际文件仅驻留在磁盘上的1个位置。

我的问题涉及两种情况:

  1. 不使用此机制的现有解决方案:有没有办法轻松地将ShareAssemblyInfo添加到所有项目? (假设我有50个项目的解决方案)。

  2. 创建新项目时,默认情况下会创建一个新的AssemblyInfo.cs。但是,我也想自动链接到SharedAssemblyInfo。

  3. 这有什么解决方案吗?通常的做法是什么?

4 个答案:

答案 0 :(得分:55)

可以链接到VS 2010中的共享程序集信息文件.Ashish Jain有一篇关于它的好文章:Sharing assembly version across projects in a solution

在解决方案级别创建共享程序集信息文件后,他从项目链接到它的说明是:

  
      
  1. 右键单击要添加共享项目的项目   汇编文件,然后选择添加 - >现有项目......

  2.   
  3. 从解决方案文件夹中选择文件“SharedAssemblyInfo.cs”。

  4.   
  5. 取代添加,单击“添加”旁边的箭头,然后单击“添加为”   链接“

  6.   
  7. 将添加的链接文件与AssemblyInfo.cs一起拖放到   同一文件夹。

  8.   
  9. 对要添加共享的所有项目重复步骤1 - 4   装配文件。

  10.   

我试过这个并且它有效。

答案 1 :(得分:50)

第一点可以通过简单的文本编辑器解决,该编辑器可以同时处理多个文件并查找/替换。只需在其中打开所有csproj,然后用

替换字符串<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="..\SharedAssemblyInfo.cs">
  <Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>

或者你可以写一个这样的实用程序:

var files = Directory.GetFiles(yourSolutionDir, "*.csproj", SearchOption.AllDirectories);
foreach (var f in files) {
  string contents = File.ReadAllText(f);
  string result = contents.Replace("<Compile Include=\"Properties\\AssemblyInfo.cs\" />", putSecondStringHere_ItIsJustTooLong); // :)
  File.WriteAllText(f, contents);
}

至于第二个问题......你可以看看Visual Studio custom project templates ,但我不确定这值得努力。您应该IMO编写测试来检查这一点。它会更简单,结果实际上几乎相同。

UPD:关于针对某些自定义规则编写检查解决方案/项目文件的测试。基本上,sln / csproj格式很简单,无需太多努力即可解析。因此,如果您想将SharedAssemblyInfo.cs链接到每个项目中 - 只需解析csproj并检查它。然后将该检查器放在构建服务器中并在每个构建上运行它。我们目前有这样的系统工作,它花费了大约两天的时间来编写,但为我们节省了更多(我们有更复杂的规则和多解决方案项目,所以值得努力)。

我现在不会在这里详细介绍这个检查(它不是那么简短),但我很快就会写博客文章 - 很可能直到本周末。所以,如果你有兴趣 - 请尽快查看my blog:)

UPD: Here它是。

答案 2 :(得分:0)

我创建了一个自动递增文件版本的应用程序。

  1. 下载Applicaiton
  2. 将以下行添加到预构建事件命令行
  3. C:\ temp \ IncrementFileVersion.exe $(SolutionDir)\ Properties \ AssemblyInfo.cs 建立项目 为了简单起见,应用程序仅在出现错误时才会抛出消息,为了确认它工作正常,您需要检查“程序集信息”中的文件版本

    注意:您必须在Visual Studio中重新加载解决方案以获取“装配信息”按钮以填充字段,但输出文件将具有更新版本。

    如需建议和要求,请发送电子邮件至telson_alva@yahoo.com

答案 3 :(得分:0)

这不适用于同时具有C#和F#项目的解决方案。 c#项目无法引用共享的f#文件,反之亦然。

在这种情况下,唯一的选择是制作一个单独的项目,并从其他项目中引用它