如何在 <Target> MsBuild 中访问节点外部的项目元数据?
How to access item metadata outside <Target> node in MsBuild?
我正在尝试为我的 NuGet 包创建一个.targets
文件,该文件将链接到正确的.lib
文件,具体取决于项目的C++运行时库。此答案建议为此使用%(ClCompile.RuntimeLibrary)
元数据。但似乎无法在<Target>
节点之外访问元数据!库依赖项添加到根<Project>
节点正下方<ItemDefinitionGroup>
节点中。
这是SSCCE:
<?xml version="1.0" encoding="us-ascii"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="main.cpp">
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
</ClCompile>
</ItemGroup>
<PropertyGroup>
<RuntimeLibrary>%(ClCompile.RuntimeLibrary)</RuntimeLibrary>
</PropertyGroup>
<Target Name="Build">
<Message Text="Property = $(RuntimeLibrary)" Importance="high" />
<Message Text="Metadata = %(ClCompile.RuntimeLibrary)" Importance="high" />
</Target>
</Project>
使用 MsBuild 运行它会产生:
Property = %(ClCompile.RuntimeLibrary)
Metadata = MultiThreadedDebugDLL
当在节点内部使用时,相同的语句%(ClCompile.RuntimeLibrary)
<Target>
扩展为值,但在节点外部<PropertyGroup>
节点中使用时<Target>
则不扩展。
那么如何访问运行时库元数据值以添加对正确库的引用呢?
更新:建议但不令人满意的解决方法是定义如下所示RuntimeLibrary
:
<RuntimeLibrary>@(ClCompile->'%(RuntimeLibrary)')</RuntimeLibrary>
在这种情况下,初始脚本的输出是正确的,但我的任务仍未解决,因为我想在条件下使用此属性。因此,如果我添加以下内容:
<PropertyGroup Condition="'$(RuntimeLibrary)'=='MultiThreadedDebugDLL'">
<TestProp>defined</TestProp>
</PropertyGroup>
...
<Message Text="TestProp = $(TestProp)" Importance="high" />
TestProp
未定义。我如何使它适用于条件?
请尝试以下操作:
<PropertyGroup>
<RuntimeLibrary>@(ClCompile->'%(RuntimeLibrary)')</RuntimeLibrary>
</PropertyGroup>
使用 @ 符号可以引用项目列表。
在StackOverflow上也有一个例子。
相关文章:
- 反向给定链表中的K节点
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- Boost Graph Library,修复节点大小
- C++A*算法并不总是在路径中具有目标节点
- 如何找到2个单链表的公共节点
- 在函数内部的声明中初始化数组,并在外部使用它
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 使外部项目可用于find_package CMake
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- 为什么我的删除节点函数实际上没有删除节点?
- C++:来自外部文件的Trivia
- 从函数角度看ID到文件路径的内部与外部映射
- C++:将外部库链接到dll库
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 我们可以删除链表中静态内存中的节点吗
- 如何在pugixml中获取节点的内部XML
- 节俭并发:未解决的外部问题
- 如何在 <Target> MsBuild 中访问节点外部的项目元数据?
- 带有一个外部指针的链接节点的循环链