有没有办法“覆盖”.csproj文件设置?

时间:2012-08-20 19:10:21

标签: visual-studio msbuild

我的解决方案中有很多项目。

我希望每个人都有一个被覆盖的设置。我可以去编辑它们。但对于跟在我后面的开发人员来说,这很乏味且容易出错。

所以,我希望有一种方法可以在构建实际开始之前将自定义.proj文件合并到.csproj中。

我想要更改的设置是输出设置(对于Debug配置)。我想将它设置为$(SolutionDir)\ bin \ Debug。

我是一个如意的思想家?或者有办法做到这一点吗?

2 个答案:

答案 0 :(得分:7)

您可以创建一个自定义.targets文件,该文件设置您希望所有项目都具有的属性。

在自定义.targets文件中,设置属性:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
    <OutputPath>$(SolutionDir)\bin\Debug</OutputPath>
</PropertyGroup>

您仍然必须在每个.csproj文件中包含此目标文件,以及删除先前设置的OutputPath属性(否则,它将覆盖.targets文件中的一个)。

<Import Project="<PathToYourTargetsFile>"/>

虽然这仍然涉及编辑每个.csproj文件,但它比在每个文件中直接设置该属性更具可维护性,特别是如果您认为可能有更多设置希望每个项目在将来具有共同点。在任何添加的项目中,开发人员必须记住导入.targets文件。

答案 1 :(得分:3)

从msbuild命令行设置输出参数:

/ P:OutputPath = “$(SolutionDir)\ BIN \调试”

OutputPath-指定输出目录相对于项目目录的路径,例如“bin \ Debug”。

另一个选项是在csproj文件中放置一个配置覆盖。如下所示。不确定这是否是你想要做的事情。

<Config
Name = “Release”
AllowunsafeBlocks = “false”
BaseAddress = “285212672”
CheckForOverflowUnderflow = “false”
ConfigurationoverrideFile = “debug. web. config”
DefineConstants = “TRACE”
DocumentationFile = “
DebugSymbols = “false”
FileAlignrnent = “4096”
IncrementalBuild = “false”
Optimize = “true”
OutputPath = “bin\”
RegisterForcomlnterop = “false”
RemovelntegerChecks = “false”
TreatWarningsAsErrors = “false”
WarningLevel = “4”
/>