gpt4 book ai didi

msbuild - 如何从属性中提取目录?

转载 作者:行者123 更新时间:2023-12-01 00:56:43 25 4
gpt4 key购买 nike

我有房产GroupProj存储完整路径名。如何提取属性的目录?

我有以下代码,但它没有按预期工作:

<PropertyGroup>
<GroupProj>C:\development\project\default.groupproj</GroupProj>
</PropertyGroup>

<Target Name="Default">
<Message Text="Echo: $(GroupProj->'%(RootDir)')" />
</Target>

我将描述我这样做的实际意图。也许有一种方法可以完成我不知道的工作。

我有一个 Delphi groupproj(MSBuild 项目)文件, C:\development\project\default.groupproj :
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Projects Include="project1.dproj">
<Dependencies/>
</Projects>
<Projects Include="project2.dproj">
<Dependencies/>
</Projects>
<Projects Include="project3.dproj">
<Dependencies/>
</Projects>
</ItemGroup>
...
</Project>

还有其他3个 MSBuild文件( project1.dprojproject2.dprojproject3.dproj )存储在与 default.groupproj 相同的文件夹中.

我创建了一个 MSBuild项目文件 (c:\test.targets):
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build" ToolsVersion="3.5">
<Import Project="$(GroupProj)" />
<Target Name="Build">
<MSBuild BuildInParallel="True" Projects="project1.dproj;project2.dproj;project3.dproj"/>
</Target>
</Project>

并执行为:
c:\> msbuild /p:GroupProj="C:\development\project\default.groupproj" test.targets

执行将失败为 MSBuild找不到 projectN.dproj文件。问题应该是工作目录没有设置为 default.groupproj .

我想到的一个直接解决方案是提取 $(GroupProj) 的目录并连接到那里 projectN.dproj文件。

这就是我问题的全部内容。

最佳答案

尝试这样的事情:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<PropertyGroup>
<GroupProj>C:\development\project\default.groupproj</GroupProj>
</PropertyGroup>

<Target Name="Build">
<CreateItem Include="$(GroupProj)">
<Output TaskParameter="Include" ItemName="ItemFromProp"/>
</CreateItem>

<Message Text="1. @(ItemFromProp -> '%(RootDir)%(Directory)')"/>
<Message Text="2. %(ItemFromProp.RootDir)%(ItemFromProp.Directory)"/>
<Message Text="3. %(ItemFromProp.Identity)"/>
<Message Text="4. %(ItemFromProp.FullPath)"/>
<Message Text="5. %(ItemFromProp.FileName)"/>
<Message Text="6. %(ItemFromProp.Extension)"/>
</Target>
</Project>

编辑:

要并行构建项目,请尝试以下操作:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<Target Name="GetGroupProjPath">
<ItemGroup>
<GroupProj Include="$(GroupProj)" />
<GroupProjPath Include="@(GroupProj->'%(Directory)')" />
</ItemGroup>

<PropertyGroup>
<GroupProjPath>@(GroupProjPath->'%(RootDir)%(Identity)')</GroupProjPath>
</PropertyGroup>
</Target>

<Import Project="$(GroupProj)" />
<Target Name="GetDProjs" DependsOnTargets="GetGroupProjPath">
<ItemGroup>
<DProjs Include="@(Projects->'$(GroupProjPath)%(FileName)%(Extension)')" />
</ItemGroup>
</Target>

<Target Name="Build" DependsOnTargets="GetDProjs">
<Message Text="@(DProjs)" />
</Target>
</Project>

关于msbuild - 如何从属性中提取目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27266498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com