【问题标题】:MsBuild SDK project style: project dependencies sometimes failsMsBuild SDK 项目风格:项目依赖有时会失败
【发布时间】:2018-09-24 15:21:38
【问题描述】:

在解决方案中,我将一些依赖项目配置为 SDK 样式项目:

  • Proj A 负责做一些例程如 MsBuild 任务
  • 需要这样处理才能正确编译的 Proj B 项目
  • 任务在 Proj B 中配置为 MsBuild 目标,属性为 BeforeTargets="CoreCompile"。

基于 Proj A 应该在运行 Proj B 编译任务之前完全编译。 两个项目都有不同的编译目标(NetStandard20 和 Net462)。因此,我无法直接引用,而是通过将属性 AddSyntheticProjectReferencesForSolutionDependencies 设置为 false 来进行解决方案范围的项目依赖(否则 msbuild 会尝试强制项目依赖)。

在该设置中,MsBuild 有时会在编译时失败:Proj A 开始编译但在 Proj B 运行任务时没有及时完成。 MSBuild 在 CI 机器上以 /m 键启动。

欢迎任何想法。

【问题讨论】:

    标签: msbuild msbuild-task .net-standard-2.0 msbuild-target


    【解决方案1】:

    在这种情况下,您确实需要合成项目引用,但目前 MSBuild 中存在一个微妙问题,如果具有依赖项的项目是多目标的,则会在项目引用之间产生一些问题。这是fixed in 15.9

    请在 Visual Studio 15.9 预览版中试用(撰写本文时:15.9 Preview 2)。

    如果不想等,可以自己在csproj文件中添加类似的项目引用:

    <ItemGroup>
      <ProjectReference Include="..\other\project.csproj"
        ReferenceOutputAssembly="false"
        LinkLibraryDependencies="false"
        CopyLocal="false"
        SkipGetTargetFrameworkProperties="true"
        GlobalPropertiesToRemove="TargetFramework"
        />
    </ItemGroup>
    

    【讨论】:

    • 谢谢,这样的项目依赖对我有用。我还遇到了带有 SDK 项目的 VS(大约 150 个项目的解决方案)消耗两倍的内存(2.5Gb 对 1.2Gb 经典风格)的情况。您是否偶然知道是否有任何技巧可以减少它或在不久的将来会得到改善?
    • 我没有,但请在github.com/dotnet/project-system 提出问题,看看项目系统团队成员是否可以帮助您
    • 我已经在生产环境中尝试过,并获得了此类参考的警告图标。我假设是因为项目目标不同。您知道任何可以忽略人工引用警告的属性吗?
    • 我发现添加 ReferenceOutputAssembly="false" 会导致警告错误,但仍然没有找到隐藏它的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多