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

时间:2013-11-25 08:05:23

标签: c# visual-studio msbuild

我有一个包含很多C#项目的解决方案,如何快速更改所有项目的配置,比如我想将输出文件夹从bin更改为MyBin。我知道C ++属性表可以做类似的事情,但C#没有属性表。

3 个答案:

答案 0 :(得分:3)

您可以使用常见的“部分”项目文件来存储常见内容。

将您想要同时更改的所有内容移动到独立的.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>

使用msbuild import声明将“公共部分”包含在解决方案中的每个项目中:

<?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>

MsBuild以与C ++相同的方式或多或少地导入工作:在构建项目之前,所有导入指令都替换为导入文件的内容。现在,您可以在一个文件中更改公共属性 - common.proj

有一件重要的事情需要提及:VS缓存包含项目文件,因此在对common.proj文件应用更改后,您必须重新加载所有项目(所以我建议您在主动更改时从命令行构建commom.proj

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

答案 1 :(得分:2)

您必须定义新的Build Configuration,可以从 Release Debug 复制或手动构建。在您为每个项目进行自定义之后,就您刚刚创建的自定义构建选项并完成了。这自然只能完成一次。之后,每当您选择自定义构建时,为解决方案中的每个项目选择的所有属性都将使用您想要的属性进行设置。

enter image description here

答案 2 :(得分:1)

  • 右键单击解决方案中的所有项目,一个接一个。
  • 点击每个
  • 上的'卸载'
  • 然后再次点击“编辑XXX.csproj”

您现在将许多XML作为文本文件打开。

现在使用Find&amp; Replace(如果使用默认快捷键,则为control-shift-H),并设置:

  • 找到:OutputPath>bin\Debug</OutputPath
  • 替换为:MyBin\Debug
  • 查看:All open documents

并点击Replace All

然后对bin\ReleaseMyBin\Release执行相同操作。

然后保存所有XML,然后右键单击每个项目并选择“重新加载”。

您可以在任何文本编辑器或任何命令行查找和替换实用程序(如sed)中执行相同的操作。如果您喜欢它,请使用它们 - 它将使您免于右键/卸载所有项目。

您还可以利用CSPROJs只是MSBuild文件这一事实,因此您可以创建一个“配置”MSBuild脚本,该脚本将包含在您的每个C#项目中,并将定义额外的变量,如“公共输出路径”等。虽然这确实有效(我已经做了几次),但它最有可能以最自然的方式搞砸VS UI中的一些PropertySheets,例如,如果你使用它来覆盖/设置OutputPaths,那么VS UI将显示空的或损坏的输出路径并尝试使用VS UI来更正/更改它们将依次覆盖从公共配置文件读取它们的智能设置。显而易见,不是吗。

编辑:这里很快解释:Partial .csproj Files但是,请在下面阅读我的评论,以防万一。