首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AppendTargetFrameworkToOutputPath在.targets文件中失败

AppendTargetFrameworkToOutputPath在.targets文件中失败
EN

Stack Overflow用户
提问于 2018-12-05 14:39:11
回答 1查看 4.1K关注 0票数 5

我试图集中处理许多项目的一些构建配置,而MSBuild解决方案就是使用 files

我想应用于所有项目的一种配置是防止netcoreapp2.1附加到所有输出目录。要做到这一点,只需包括以下一行配置:

代码语言:javascript
复制
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>

但是,当我将这一行放在Common.targets文件中,并使用.csproj文件使用<Import Project="PathToCommonTargets" />将该文件包含到该文件中时,它不会产生任何效果,而且我仍然会在输出文件夹的末尾得到netcoreapp2.1

我怎么才能解决这个问题?

原因更新:我们是其他10多家公司的技术合作伙伴。也就是说,我们为基础结构(比方说映射到C:\Infra)和每个公司有一个独立的源代码管理(比如映射到C:\CompanyAC:\CompanyB等),它可能包含多达100个解决方案,每个解决方案可能包含10个以上的项目。因此,我们的首要要求是通过DRYing尽可能地降低成本--从角度到Java,到Swift,再到.NET。基于持续改进的精神,我们不希望我们的输出被放置在\bin\Debug\netcoreapp2.1中超过2000个项目文件(而且还会增加),以减少开发人员进入输出文件夹的时间,并使重构更容易、更便宜。为了从netcoreapp2.0升级到netcoreapp2.1,我们做了噩梦,因为我们自动化的输出路径。这就是我们尝试使用AppendTargetFrameworkToOutputPath的原因。但我真的很沮丧,为什么事情会如此具有挑战性。对我来说,MSBuild应该首先加载所有内容,然后开始构建。这样,在构建管道期间,布尔属性将无处不在,并且不需要配置这么多复杂的属性。毕竟,如果配置布尔属性所需的时间超过了true/false,那么布尔属性的用途是什么?

EN

回答 1

Stack Overflow用户

发布于 2018-12-06 03:09:50

AppendTargetFrameworkToOutputPath在.targets文件中失败

属性AppendTargetFrameworkToOutputPath可以停止将MSBuild附加到OutputPath,但是由于在创建项目时已经生成了TargetFramework文件夹,所以在将TargetFramework文件夹添加到项目之后,需要手动删除TargetFramework文件夹,否则该文件夹将始终存在,那么我们就可以在不使用TargetFrameworkOutputPath的情况下构建项目。

如果TargetFramework文件夹在删除后仍然生成,则应该将.targets的内容加倍,导入语句是正确的。为了确保它们,我在.target文件中添加了一个测试自定义目标:

代码语言:javascript
复制
<?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>之前,将脚本放在下面:

代码语言:javascript
复制
<Target Name="RemoveDirectories" AfterTargets="Build">  
    <RemoveDir  
        Directories="$(ProjectDir)$(OutDir)" /> 
</Target> 

此外,您需要将TargetFramework中的文件备份到bin\debug或bin\release文件夹,因此我们还需要在删除任务之前复制任务:

代码语言:javascript
复制
<ItemGroup>  
    <MySourceFiles Include="$(ProjectDir)$(OutDir)\*.*"/>  
</ItemGroup> 

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

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

希望这能有所帮助。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53634727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档