【发布时间】:2013-09-22 09:09:12
【问题描述】:
我有一个解决方案,其中包含一个 windows phone 类库项目 BaseProj,以及几个引用该项目的 WP 项目 A、B em> 等等。BaseProj 有一个 LocationHelper 类。
假设项目 A 需要 BaseProj 以使用 LocationHelper 类进行编译,但项目 B 应该在没有 ID_CAP_LOCATION 功能的情况下构建,因此在 BaseProj 构建时不应包含 LocationHelper 类。
我可以使用条件编译符号来实现这一点,问题是:如何根据我是否正在构建项目 A 使用适当的符号构建 BaseProj > 还是B?
经过一番研究,我想出了以下解决方案,我在 BaseProj.csproj 中添加了
<PropertyGroup Condition=" '$(TestProperty)'==true ">
<DefineConstants>$(DefineConstants);TEST_SYMBOL</DefineConstants>
</PropertyGroup>
在 B.csproj 中的 ProjectReference 中有一个属性:
<ProjectReference Include="..\BaseProj\BaseProj.csproj">
<Project>{...}</Project>
<Name>BaseProj</Name>
<Properties>TestProperty=true</Properties>
</ProjectReference>
认为TEST_SYMBOL 应该在使用B 而不是A 构建时添加。当我使用 MSBuild 构建时,这非常有效。另一方面,Visual Studio 完全忽略了这一点,这意味着我在调试和使用构建脚本进行发布构建时会得到不同的行为。
如何从 MSBuild 和 Visual Studio 获得我想要的行为?
【问题讨论】:
标签: c# visual-studio msbuild build-process conditional-compilation