Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 共享AssemblyInfo以在整个解决方案中实现统一版本控制_C#_.net_Visual Studio_Visual Studio 2010_.net Assembly - Fatal编程技术网

C# 共享AssemblyInfo以在整个解决方案中实现统一版本控制

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

我读过关于这项技术的文章:

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

我的问题涉及两种情况:

  • 不使用此机制的现有解决方案:是否有一种方法可以轻松地将ShareAssemblyInfo添加到所有项目中?(假设我有一个包含50个项目的解决方案)

  • 创建新项目时,默认情况下会创建一个新的AssemblyInfo.cs。不过,我也希望自动链接到SharedAssemblyInfo


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

    第一点可以通过简单的文本编辑器解决,该编辑器可以一次处理多个文件并查找/替换。只需打开其中的所有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对此有一篇很好的博文:

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

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

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

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

  • 将添加的链接文件拖到中的AssemblyInfo.cs旁边 同一个文件夹

  • 对要添加共享资源的所有项目重复步骤1-4 程序集文件


  • 我已经试过了,而且效果很好。

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

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

    注意:您必须在Visual studio中为“程序集信息”按钮重新加载解决方案以填充字段,但是您的输出文件将具有更新版本


    如需建议和请求,请通过telson向我发送电子邮件_alva@yahoo.com

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


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

    常见做法是创建唯一的装配信息#1-我同意这可以通过文本编辑器完成。我想知道是不是VS本身以某种方式支持了这一点。(顺便说一句,你认为EditPad Pro比Notepad++好吗?#2-你说写一个测试来检查这个是什么意思?是的,EditPad Pro在我看来更好。至少上次我检查N++时它肯定更好。它也不是免费软件,所以你应该认为你自己需要它。我已经更新了关于你的第二点的一些细节的答案。谢谢你解释我忽略的小箭头!无需重复步骤1-4。您可以将链接文件从第一个项目拖到下一个项目。这会将链接文件复制到下一个项目。您也可以通过替换所有*.csproj文件中的文本来完成此操作。更新一个项目并比较解决方案中所有其他项目的新旧csproj文件和应用程序中的结果;)这是一个比公认的答案好得多的答案。由于实现起来非常简单,所以应该在VisualStudio中构建类似的内容。