有没有一种方法可以“覆盖” .csproj 文件的设置?

6
我在解决方案中有很多项目。
我希望每个项目都能有自己的设置。 我可以一个个地编辑它们,但这对于接替我的开发人员来说是繁琐且容易出错的。
因此,我希望在实际构建之前将自定义 .proj 文件合并到 .csproj 中。
我想更改的设置是输出设置(针对调试配置)。 我想将其设置为 $(SolutionDir)\bin\Debug。
我是一个富有想象力的人? 还是有一种方法可以做到这一点?

只要尝试一下就会发现宏没有被展开。所以不行。 - Hans Passant
@HansPassant - 如果您卸载项目并将其添加到xml中,则宏将会展开。如果您通过IDE执行此操作,则会转义$,(和),但如果在xml中,则可以正常工作。但是,这是一个逐个修复的过程。我希望有一个更全局的解决方案。 - Vaccano
2个回答

7
你可以创建一个自定义的“.targets”文件,其中设置你想要所有项目都共用的属性。
在你的自定义“.targets”文件中,设置属性:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
    <OutputPath>$(SolutionDir)\bin\Debug</OutputPath>
</PropertyGroup>

您仍需在每个 .csproj 文件中包含此目标文件,并删除先前设置的 OutputPath 属性(否则,它会覆盖在您的 .targets 文件中设置的属性)。

<Import Project="<PathToYourTargetsFile>"/>

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


3

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

/p:OutputPath="$(SolutionDir)\bin\Debug"

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

另一个选择是将配置覆盖放在csproj文件中。例如下面的内容。不确定这是否是您想要做的事情。

<Config
Name = “Release”
AllowunsafeBlocks = “falseBaseAddress = “285212672CheckForOverflowUnderflow = “falseConfigurationoverrideFile = “debug. web. config”
DefineConstants = “TRACE”
DocumentationFile = “
DebugSymbols = “falseFileAlignrnent = “4096IncrementalBuild = “falseOptimize = “trueOutputPath = “bin\”
RegisterForcomlnterop = “falseRemovelntegerChecks = “falseTreatWarningsAsErrors = “falseWarningLevel = “4”
/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接