代码之家  ›  专栏  ›  技术社区  ›  mohammad rostami siahgeli

.targets文件中的appendTargetFrameworkToOutputPath失败

  •  1
  • mohammad rostami siahgeli  · 技术社区  · 5 年前

    我正在尝试为许多项目集中一些生成配置,而msbuild解决方案将使用 .targets files .

    我想应用于所有项目的一个配置是 netcoreapp2.1 附加到所有输出目录。要实现这一点,只需包括这一行配置:

    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
    

    但是,当我把这条线放在 Common.targets 文件,并将该文件包含在 .csproj 文件使用 <Import Project="PathToCommonTargets" /> ,那么它没有效果,我仍然得到 NetCoreApp2.1版 在输出文件夹的末尾。

    我该怎么解决?

    原因更新: 我们是一家为10多家公司提供技术合作的公司。也就是说,我们有一个基础设施的中央源代码控制(假设映射到 C:\Infra ,对于每个公司,都有一个不同的源代码管理(假设映射到 C:\CompanyA C:\CompanyB ,等等),其中可能包含多达100个解决方案,每个解决方案可能包含10个以上的项目。因此,我们最优先的要求是通过尽可能多地降低成本,从角度,从Java,到SWIFT,到.NET。基于持续改进的精神,我们不希望我们的产出被投入 \bin\Debug\netcoreapp2.1 为了减少开发人员进入输出文件夹的时间,同时也使重构到更高版本的.NET变得更容易,成本更低,我们需要2000多个项目文件(而且还在增加)。升级 netcoreapp2.0 NetCoreApp2.1版 我们做噩梦是因为我们的自动化系统有输出通道。所以我们试着用 AppendTargetFrameworkToOutputPath . 但我真的很沮丧为什么事情会如此具有挑战性。对我来说,msbuild应该先加载所有内容,然后再开始构建。这样,在构建管道期间,布尔属性将无处不在,并且不需要配置这么多复杂性。毕竟,布尔属性的用途是什么,如果它需要超过 true/false 配置它?

    1 回复  |  直到 5 年前
        1
  •  2
  •   Leo Liu    5 年前

    .targets文件中的appendTargetFrameworkToOutputPath失败

    财产 AppendTargetFrameworkToOutputPath 未能停止msbuild追加 TargetFramework OutputPath ,但因为 目标框架 创建项目时已生成文件夹, 我们需要手动删除targetframework文件夹 在添加 <Import Project="PathToCommonTargets" /> 到项目,否则该文件夹将始终存在,然后我们可以在没有 目标框架 输出路径 .

    如果 目标框架 文件夹删除后仍会生成,应将 .targets 并且import语句是正确的。为了确保它们,我在 .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>
    

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

    更新:

    你能帮我删除targetframework吗?

    要完成此任务,请卸载项目。然后在项目的最后,就在结束标记之前 </project> ,放置在脚本下面:

    <Target Name="RemoveDirectories" AfterTargets="Build">  
        <RemoveDir  
            Directories="$(ProjectDir)$(OutDir)" /> 
    </Target> 
    

    另外,你需要备份 目标框架 到bin\debug或bin\release文件夹,因此我们还需要在删除任务之前复制任务:

    <ItemGroup>  
        <MySourceFiles Include="$(ProjectDir)$(OutDir)\*.*"/>  
    </ItemGroup> 
    
    <Copy  
        SourceFiles="@(MySourceFiles)"  
        DestinationFolder="$(ProjectDir)bin\$(ConfigurationName)"  
     /> 
    
     <RemoveDir  
        Directories="$(ProjectDir)$(OutDir)" />  
    

    希望这有帮助。