gpt4 book ai didi

msbuild - AppendTargetFrameworkToOutputPath 在 .targets 文件中失败

转载 作者:行者123 更新时间:2023-12-04 12:17:32 25 4
gpt4 key购买 nike

我正在尝试为许多项目集中一些构建配置,而 MSBuild 解决方案是使用 .targets files .
我想应用于所有项目的一种配置是防止 netcoreapp2.1附加到所有输出目录。要实现这一点,只需包含这一行配置:

<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
但是,当我将此行放在 Common.targets 中时文件,并将该文件包含在我的 .csproj 中文件使用 <Import Project="PathToCommonTargets" /> ,那么它没有效果,我仍然得到 netcoreapp2.1在我的输出文件夹的末尾。
我该如何解决这个问题?
原因更新:
我们是一家公司,是其他 10 多家公司的技术合作伙伴。也就是说,我们有一个针对基础设施的中央源代码控制(假设映射到 C:\Infra),并且对于每个公司都有一个不同的源代码控制(假设映射到 C:\CompanyAC:\CompanyB 等),其中可能包含多达 100 个解决方案,每个解决方案可能包含 10 个以上的项目。因此,我们的首要要求是通过 DRYing 一切来尽可能地降低成本,从 Angular、Java、Swift 到 .NET。基于持续改进的精神,我们不希望我们的产出被投入 \bin\Debug\netcoreapp2.1用于 2000 多个项目文件(并且还在增加),以减少我们的开发人员进入输出文件夹的时间,并使重构到更高版本的 .NET 更容易、成本更低。从 netcoreapp2.0 升级至 netcoreapp2.1由于自动化中的输出路径,我们做了噩梦。这就是我们尝试使用 AppendTargetFrameworkToOutputPath 的原因.但我真的很沮丧,为什么事情应该如此具有挑战性。对我来说,MSBuild 应该首先加载所有东西,然后开始构建。这样,在构建管道期间, bool 属性将无处不在,并且不需要如此复杂的配置。毕竟 bool 属性有什么用,如果超过 true/false要配置吗?

最佳答案

AppendTargetFrameworkToOutputPath fails in .targets files



属性(property) AppendTargetFrameworkToOutputPath可以停止 MSBuild 附加 TargetFrameworkOutputPath ,但因为 TargetFramework文件夹在我们创建项目时已经生成, 我们需要手动删除TargetFramework文件夹添加 <Import Project="PathToCommonTargets" /> 后到项目,否则该文件夹将一直存在,那么我们可以在没有 TargetFramework 的情况下构建项目至 OutputPath .

如果 TargetFramework文件夹删除后仍然生成,你应该把 .targets的内容加倍并且导入语句是正确的。为了确保它们,我在 .target 中添加了一个测试自定义目标。文件:
<?xml version="1.0" encoding="utf-8"?>

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<PropertyGroup>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
</PropertyGroup>

<Target Name="Test" AfterTargets="Build">
<Message Text="This is Test Custom Target!"></Message>
</Target>

</Project>

当我们构建项目时,我们可以在输出窗口中看到消息信息,这意味着 .targets 的内容并且导入语句是正确的。

更新:

Could you please help me on how to delete TargetFramework?



为此,请卸载您的项目。然后在项目的最后,就在结束标记之前 </project> , 放置在脚本下面:
<Target Name="RemoveDirectories" AfterTargets="Build">  
<RemoveDir
Directories="$(ProjectDir)$(OutDir)" />
</Target>

此外,您需要备份 TargetFramework 中的文件。到 bin\debug 或 bin\release 文件夹,所以我们还需要在删除任务之前复制任务:
<ItemGroup>  
<MySourceFiles Include="$(ProjectDir)$(OutDir)\*.*"/>
</ItemGroup>

<Copy
SourceFiles="@(MySourceFiles)"
DestinationFolder="$(ProjectDir)bin\$(ConfigurationName)"
/>

<RemoveDir
Directories="$(ProjectDir)$(OutDir)" />

希望这可以帮助。

关于msbuild - AppendTargetFrameworkToOutputPath 在 .targets 文件中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53634727/

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