gpt4 book ai didi

f# - 通过任务选择在目标中生成的 ItemGroup 文件的位置

转载 作者:行者123 更新时间:2023-12-04 12:53:14 27 4
gpt4 key购买 nike

我有以下设置(为简洁起见,删除了无趣的 XML):

我的项目.fsproj

<Project ...>
<Import Project="MyTask.props" />
...
<ItemGroup>
<Compile Include="Program.fs" />
</ItemGroup>
</Project>

MyTask.props
<Project ...>
<UsingTask XXX.UpdateAssemblyInfo />
<Target Name="UpdateAssemblyInfo"
BeforeTargets="CoreCompile">
<UpdateAssemblyInfo ...>
<Output
TaskParameter="AssemblyInfoTempFilePath"
PropertyName="AssemblyInfoTempFilePath" />
</UpdateAssemblyInfo>

<ItemGroup>
<Compile Include="$(AssemblyInfoTempFilePath)" />
</ItemGroup>
</Target>
</Project>

问题是MyTask.props添加的ItemGroup添加了 最后 ,尽管在项目一开始就被导入。我认为这是因为 ItemGroup 并没有实际导入 - 它是在任务运行时添加的。

这在 F# 中不是一件好事,因为文件顺序很重要 - 例如,将文件包含在构建列表的末尾意味着不可能构建 EXE(因为入口点必须在最后一个文件中)。

因此我的问题 - 有没有办法让我输出一个 ItemGroup 作为目标的一部分,并且首先生成 ItemGroup ?

最佳答案

有点晚了,但这可能会对将来的某人有所帮助,我没有在此示例中使用导入标记,但它的工作方式相同,重要的部分是“UpdateAssemblyInfo”目标,主要思想是清除和使用适当的排序顺序重新生成 Compile ItemGroup。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

<Target Name="Build" DependsOnTargets="UpdateAssemblyInfo">

</Target>

<Target Name="UpdateAssemblyInfo">
<!-- Generate your property -->
<PropertyGroup>
<AssemblyInfoTempFilePath>ABC.xyz</AssemblyInfoTempFilePath>
</PropertyGroup>

<!-- Copy current Compile ItemGroup to TempCompile -->
<ItemGroup>
<TempCompile Include="@(Compile)"></TempCompile>
</ItemGroup>

<!-- Clear the Compile ItemGroup-->
<ItemGroup>
<Compile Remove="@(Compile)"/>
</ItemGroup>

<!-- Create the new Compile ItemGroup using the required order -->
<ItemGroup>
<Compile Include="$(AssemblyInfoTempFilePath)"/>
<Compile Include="@(TempCompile)"/>
</ItemGroup>

<!-- Display the Compile ItemGroup ordered -->
<Message Text="Compile %(Compile.Identity)"/>
</Target>
</Project>

关于f# - 通过任务选择在目标中生成的 ItemGroup 文件的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32701909/

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