我想用条件定义msbuild常量:
<DefineConstants Condition="if have a reference to MyTest.dll">TEST</DefineConstants>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="MyTest.dll" />
</ItemGroup>
我该怎么做?
答案 0 :(得分:0)
例如,请参阅this question,了解如何使用“我的项目组是否包含项目X?”等条件。但是,正如所指出的那样,在全局范围内调用时,它必须在目标内完成。因此,您必须添加此类Target并使其在构建开始之前自动运行:
<Target Name="AdjustDefineConstants" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<DefineConstants Condition="'%(Reference.Identity)' == 'Mytest.dll'">TEST</DefineConstants>
</PropertyGroup>
<Message Text="DefineConstants is now $(DefineConstants)"/>
</Target>
答案 1 :(得分:0)
这是可能的,但您需要解决限制,即在访问项元数据时,目标之外的PropertyGroup
和ItemGroup
元素上的条件表达式会有一些限制。
您可以通过简单地将项目组连接到标量属性来利用ItemGroup
扩展。在这里,我基本上将_DefineConstants
粘贴到DefineConstants
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Reference Include="MyTest.dll" />
</ItemGroup>
<ItemGroup Condition="@(Reference->AnyHaveMetadataValue('Identity', 'MyTest.dll'))">
<_DefineConstants Include="Test" />
</ItemGroup>
<PropertyGroup>
<DefineConstants>$(DefineConstants);@(_DefineConstants)</DefineConstants>
</PropertyGroup>
<Target Name="Build">
<Message Text="DefineConstants: $(DefineConstants)" />
</Target>
</Project>
这将打印";Test"