C# 共享AssemblyInfo以在整个解决方案中实现统一版本控制
我读过关于这项技术的文章: 基本上,这意味着创建一个SharedAssemblyInfo.cs,其中包含有关程序集的版本控制信息,并将此文件作为链接添加到解决方案的所有项目,因此实际文件仅驻留在磁盘上的一个位置 我的问题涉及两种情况:C# 共享AssemblyInfo以在整个解决方案中实现统一版本控制,c#,.net,visual-studio,visual-studio-2010,.net-assembly,C#,.net,Visual Studio,Visual Studio 2010,.net Assembly,我读过关于这项技术的文章: 基本上,这意味着创建一个SharedAssemblyInfo.cs,其中包含有关程序集的版本控制信息,并将此文件作为链接添加到解决方案的所有项目,因此实际文件仅驻留在磁盘上的一个位置 我的问题涉及两种情况: 不使用此机制的现有解决方案:是否有一种方法可以轻松地将ShareAssemblyInfo添加到所有项目中?(假设我有一个包含50个项目的解决方案) 创建新项目时,默认情况下会创建一个新的AssemblyInfo.cs。不过,我也希望自动链接到SharedAssem
有什么解决办法吗?通常的做法是什么?第一点可以通过简单的文本编辑器解决,该编辑器可以一次处理多个文件并查找/替换。只需打开其中的所有csproj,并用替换字符串
<Compile Include="..\SharedAssemblyInfo.cs">
<Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>
属性\SharedAssemblyInfo.cs
或者,您可以编写这样的实用程序:
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);
}
var files=Directory.GetFiles(yourSolutionDir,“*.csproj”,SearchOption.AllDirectories);
foreach(文件中的var f){
字符串内容=File.ReadAllText(f);
string result=contents.Replace(“,putSecondStringHere_ItIsJustTooLong);/:)
File.writealText(f,contents);
}
至于第二个问题。。。你可以看一看,但我不确定这是否值得努力。您应该编写一个测试来检查这一点。这会简单得多,结果实际上几乎是一样的
UPD:关于编写测试以根据一些自定义规则检查解决方案/项目文件。基本上,sln/csproj格式非常简单,无需付出很大努力即可解析。因此,如果您想将SharedAssemblyInfo.cs
链接到每个项目中,只需解析csproj并进行检查。然后将该检查器放在构建服务器中,并在每个构建上运行它。我们目前有这样的系统在工作,编写它大约需要两天的时间,但节省了我们更多的时间(我们有更复杂的规则和多解决方案项目,所以值得付出努力)
我现在不会在这里详细地写这个检查(它不是那么短),但我很快就会写关于它的博客文章——很可能直到本周末。因此,如果您感兴趣,请尽快查看:)
UPD:是的。可以链接到VS 2010中的共享部件信息文件。Ashish Jain对此有一篇很好的博文: 在解决方案级别创建共享部件信息文件后,他从项目链接到该文件的说明如下:
我已经试过了,而且效果很好。我已经创建了一个应用程序来自动增加文件版本
如需建议和请求,请通过telson向我发送电子邮件_alva@yahoo.com这不适用于同时具有C和F项目的解决方案。c#项目不能引用共享f#文件,反之亦然
在这种情况下,唯一的选择是创建一个单独的项目,并从其他项目中引用它常见做法是创建唯一的装配信息#1-我同意这可以通过文本编辑器完成。我想知道是不是VS本身以某种方式支持了这一点。(顺便说一句,你认为EditPad Pro比Notepad++好吗?#2-你说写一个测试来检查这个是什么意思?是的,EditPad Pro在我看来更好。至少上次我检查N++时它肯定更好。它也不是免费软件,所以你应该认为你自己需要它。我已经更新了关于你的第二点的一些细节的答案。谢谢你解释我忽略的小箭头!无需重复步骤1-4。您可以将链接文件从第一个项目拖到下一个项目。这会将链接文件复制到下一个项目。您也可以通过替换所有*.csproj文件中的文本来完成此操作。更新一个项目并比较解决方案中所有其他项目的新旧csproj文件和应用程序中的结果;)这是一个比公认的答案好得多的答案。由于实现起来非常简单,所以应该在VisualStudio中构建类似的内容。