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


70

我已经读过这种技术:VS项目中的共享程序集信息-JJameson的博客

基本上,这意味着要创建一个具有程序集版本信息的SharedAssemblyInfo.cs,并将此文件作为“链接”添加到该解决方案的所有项目,因此实际文件仅位于磁盘上的1个位置。

我的问题涉及2种情况:

  1. 现有的解决方案不使用此机制:是否可以轻松地将ShareAssemblyInfo添加到所有项目中?(可以说我有50个项目的解决方案)。

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

有什么解决办法吗?常见的做法是什么?


常见的做法是创建唯一的装配信息
VMAtm 2011年

Answers:


53

第一点可以通过简单的文本编辑器解决,该编辑器可以一次处理多个文件并查找/替换。只需打开其中的所有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自定义项目模板,但是我不确定是否值得努力。您应该由IMO编写测试,以代替进行检查。这将更加简单,结果实际上几乎相同。

UPD:关于编写测试以根据一些自定义规则检查解决方案/项目文件。基本上,sln / csproj格式非常简单,可以轻松解析。所以如果你想拥有SharedAssemblyInfo.cs链接到每个项目-只需解析csproj并进行检查即可。然后将该检查程序放在构建服务器中,并在每个构建上运行它。我们目前正在使用这样的系统,编写该文件需要花费大约两天的时间,但是为我们节省了很多(我们有更复杂的规则和多解决方案项目,因此值得付出努力)。

我现在不会在这里详细介绍这种检查(不是很短),但是我将很快写有关它的博客文章-很有可能要到本周末。因此,如果您有兴趣-尽快查看我的博客:)

UPD: 在这里


#1-我同意可以使用文本编辑器完成此操作。我想知道VS本身是否以某种方式支持这一点。(顺便说一句-您认为EditPad Pro是否比Notepad ++更好?)#2-编写一个可以对此进行检查的测试意味着什么?
麦角酸

是的,EditPad Pro是更好的IMO。至少当我上次检查N ++时肯定更好。它也不是免费软件,因此您应该考虑自己是否需要它。
伊万·丹尼洛夫

我已经用有关您的第二点的一些详细信息更新了答案。
伊万·丹尼洛夫

63

可以在VS 2010中链接到共享的程序集信息文件。Ashish Jain撰写了一篇不错的博客文章:在解决方案中跨项目共享程序集版本

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

  1. 右键单击要在其中添加共享程序集文件的项目,然后选择添加->现有项目...。

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

  3. 单击添加旁边的箭头,而不是添加,然后单击“添加为链接”

  4. 将添加的链接文件与AssemblyInfo.cs一起拖到同一文件夹中。

  5. 对要为其添加共享程序集文件的所有项目重复步骤1-4。

我已经尝试过了,并且有效。


4
感谢您对我忽略的小箭头的解释!
Brock Hensley

11
无需重复步骤1-4。您可以将链接的文件从第一个项目拖到下一个项目。这会将链接文件复制到下一个项目。
ristaloff 2015年

2
您也可以通过替换所有* .csproj文件中的文本来实现。更新一个项目并比较新旧csproj文件中的结果,然后将其应用于解决方案中的所有其他项目;)
Ludwo

1
这是一个比公认答案更好的答案。由于实现起来非常简单,因此应将类似的内容内置到Visual Studio中。
轧辊

0

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

  1. 下载应用程序
  2. 将以下行添加到预构建事件命令行中

C:\ temp \ IncrementFileVersion.exe $(SolutionDir)\ Properties \ AssemblyInfo.cs生成项目为了简单起见,应用程序仅在出现错误时抛出消息,以确认其运行正常,您需要在以下位置检查文件版本“装配信息”

注意:您将不得不在Visual Studio中重新加载“ Assembly Information”按钮的解决方案以填充字段,但是您的输出文件将具有更新的版本。

如有建议和要求,请给我发送电子邮件:telson_alva@yahoo.com


0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.