Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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#项目_C#_Visual Studio_Msbuild - Fatal编程技术网

如何在解决方案中配置所有C#项目

如何在解决方案中配置所有C#项目,c#,visual-studio,msbuild,C#,Visual Studio,Msbuild,我有一个包含大量C#项目的解决方案,如何快速更改所有项目的配置,就像我想将输出文件夹从bin更改为MyBin一样。我知道C++属性表可以做类似的事情,但是C没有属性表。 您必须定义新的构建配置,这些配置可以从发行版或调试版复制,也可以全部手动构建。在您可以为每个项目自定义它的选项之后,它将与您刚刚创建和完成的自定义构建相关。当然,这只需要做一次。之后,无论何时选择该自定义生成,为解决方案中的每个项目选择的所有属性都将设置为所需的属性 右键逐个单击解决方案中的所有项目 单击每个屏幕上的“卸载”

我有一个包含大量C#项目的解决方案,如何快速更改所有项目的配置,就像我想将输出文件夹从bin更改为MyBin一样。我知道C++属性表可以做类似的事情,但是C没有属性表。 您必须定义新的
构建配置
,这些配置可以从发行版或调试版复制,也可以全部手动构建。在您可以为每个项目自定义它的选项之后,它将与您刚刚创建和完成的自定义构建相关。当然,这只需要做一次。之后,无论何时选择该自定义生成,为解决方案中的每个项目选择的所有属性都将设置为所需的属性

  • 右键逐个单击解决方案中的所有项目
  • 单击每个屏幕上的“卸载”
  • 然后再次单击所有页面上的“编辑XXX.csproj”
现在将有许多XML作为文本文件打开

现在使用“查找和替换”(control-shift-H,如果使用默认快捷方式),并设置:


  • 查找内容:
    OutputPath>bin\Debug您可以使用公共“部分”项目文件来存储公共内容

    将所有要同时更改的内容移动到一个独立的.proj文件中,例如
    common.proj

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
       <PropertyGroup>
        <OutputPath>Debug</OutputPath>
        <Platform>AnyCPU</Platform>
      </PropertyGroup>
    </Project>
    
    
    调试
    任意CPU
    
    而不是使用msbuild声明将公共部分“包含”到解决方案中的每个项目中:

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <Import Project="common.proj" />
    </Project>
    
    
    
    MSBuy导入的工作或多或少与C++的方式相同:在构建一个项目之前,所有导入指令都被导入文件的内容所取代。现在,您可以在一个文件中更改公共属性-
    common.proj

    有一点很重要:VS缓存包括项目文件,因此在对
    common.proj
    文件进行更改后,您必须重新加载所有项目(因此,我建议在您主动更改
    commom.proj
    时从命令行构建)


    我们使用这种方法来管理代码分析设置(因为它们在解决方案中的所有项目中都应该是相同的)。

    您可以搜索并替换所有csproj文件。这是解决我问题的标准解决方案吗?是的。。。因为这真的没有用户界面。NET的传统只是使用
    bin
    obj
    目录。您肯定只需要更改条目程序集吗?所有引用都会在生成时复制到dependent bin文件夹(除非您另有指定)。output文件夹只是一个示例,我可能还想更改一些其他值,如.NET framework版本等。如果我正确阅读OP,他不想按每个项目执行,他想一次性配置所有项目。@Moo Juice:是的。但这是一种方法。你可以为解决方案中的每个项目做一次这样的操作,在一切正常后,只需在不同的配置选项之间切换。Tigran-是的,这是一种方式,但前提是你只想将自己局限于VS UI。如果您不在乎,并且理解VS项目和MSBuild之间的关系,那么您实际上不必在意,而且您可以选择一整套新选项。VSUI默认提供的并不总是最好的,有时必须进行一些定制。其实很简单,谢谢你的回复。我知道如何通过编辑xml项目文件来更改配置,也知道如何在VS GUI中更改配置。我想要实现的是修改一个简单的值,然后所有使用该值的项目都将被更改,例如,我最初对所有项目使用.NET framework 4.0,现在我想使用4.5。唯一的方法是,正如我前面所说的,在.csproj文件中使用MSBuild的“import”指令。您将创建一个附加的“半项目”文件,该文件将设置一些公共属性,然后每个项目将“包括”该特殊文件。查看此线程:观察并特别注意他们对“最派生”文件的看法。如果projectA包括projectB,其中包括projectC,并且projectD也包括projectC,那么您应该只将projectA和projectD附加到VS IDE中的解决方案。请注意,额外的projectB和projectC不需要以.csproj结尾。您可以“包括”任何XML/MSBuild格式正确的文件。这意味着您可以对它们进行不同的命名,也可以将它们包含在解决方案中,但不能将其作为项目,而是作为简单的XML文件。这将使编辑它们变得更容易。但是,您仍然必须非常小心:除非重新加载解决方案/projectA/projectD,否则VSIDE通常不会注意到您对这些额外文件所做的任何更改。幸运的是,这是唯一的IDE问题。“构建”选项将始终正确阅读所有内容。非常感谢您的帮助!