我试图集中处理许多项目的一些构建配置,而MSBuild解决方案就是使用 files。
我想应用于所有项目的一种配置是防止netcoreapp2.1附加到所有输出目录。要做到这一点,只需包括以下一行配置:
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>但是,当我将这一行放在Common.targets文件中,并使用.csproj文件使用<Import Project="PathToCommonTargets" />将该文件包含到该文件中时,它不会产生任何效果,而且我仍然会在输出文件夹的末尾得到netcoreapp2.1。
我怎么才能解决这个问题?
原因更新:我们是其他10多家公司的技术合作伙伴。也就是说,我们为基础结构(比方说映射到C:\Infra)和每个公司有一个独立的源代码管理(比如映射到C:\CompanyA和C:\CompanyB等),它可能包含多达100个解决方案,每个解决方案可能包含10个以上的项目。因此,我们的首要要求是通过DRYing尽可能地降低成本--从角度到Java,到Swift,再到.NET。基于持续改进的精神,我们不希望我们的输出被放置在\bin\Debug\netcoreapp2.1中超过2000个项目文件(而且还会增加),以减少开发人员进入输出文件夹的时间,并使重构更容易、更便宜。为了从netcoreapp2.0升级到netcoreapp2.1,我们做了噩梦,因为我们自动化的输出路径。这就是我们尝试使用AppendTargetFrameworkToOutputPath的原因。但我真的很沮丧,为什么事情会如此具有挑战性。对我来说,MSBuild应该首先加载所有内容,然后开始构建。这样,在构建管道期间,布尔属性将无处不在,并且不需要配置这么多复杂的属性。毕竟,如果配置布尔属性所需的时间超过了true/false,那么布尔属性的用途是什么?
发布于 2018-12-06 03:09:50
AppendTargetFrameworkToOutputPath在.targets文件中失败
属性AppendTargetFrameworkToOutputPath可以停止将MSBuild附加到OutputPath,但是由于在创建项目时已经生成了TargetFramework文件夹,所以在将TargetFramework文件夹添加到项目之后,需要手动删除TargetFramework文件夹,否则该文件夹将始终存在,那么我们就可以在不使用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和导入语句的内容是正确的。
更新:
你能帮我删除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)" />
希望这能有所帮助。
https://stackoverflow.com/questions/53634727
复制相似问题