我有一个解决方案,其中包含一个 windows phone 类库项目BaseProj和几个引用该项目A、B等的 WP 项目。 BaseProj有一个 LocationHelper 类。
假设项目A需要BaseProj使用 LocationHelper 类进行编译,但项目B应该在没有 ID_CAP_LOCATION 功能的情况下构建,因此在BaseProj构建时不应包含 LocationHelper 类。
我可以使用条件编译符号来实现这一点,问题是:如何根据我是在构建项目A还是B来使用适当的符号构建BaseProj?
经过一些研究,我想出了以下解决方案,在 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获得我想要的行为?