【问题标题】:Why does MSBuild ignore ProjectReference Private=False if OutputPath is specified如果指定了 OutputPath,为什么 MSBuild 会忽略 ProjectReference Private=False
【发布时间】:2021-06-27 05:07:47
【问题描述】:

我有一个带有非私有 ProjectReference 项的项目:

<ItemGroup>
    <ProjectReference Include="..\..\RProcessConfig\RProcessConfig.csproj">
      <Private>false</Private>
    </ProjectReference>
  </ItemGroup>

从命令行使用"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\Msbuild.exe" %cd%\Modules\AreaArithmetics\AreaArithmetics.csproj 就像一个魅力。依赖dll没有复制到输出目录,我很高兴。

但如果我使用"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\Msbuild.exe" %cd%\Modules\AreaArithmetics\AreaArithmetics.csproj /p:OutputPath=%cd%\RProcessService\RProcessServiceCore\bin\publish\Modules 指定另一个输出路径而不是AreaArithmetics.csproj 中指定的路径,&lt;Private&gt;false&lt;/Private&gt; 部分似乎被忽略,我的依赖项出现在输出文件夹中

这两个调用之间的唯一区别是第二个调用指定了一个到 MSBuild 的 OutputPath。这怎么会破坏参考配置?

【问题讨论】:

    标签: reference msbuild


    【解决方案1】:

    在这种情况下,通过 CLI 调用设置的 OutputPath 将是 global property,因此也适用于所有引用的项目,因此 RProcessConfig.csproj 也将构建到相同的输出目录,主项目不会复制它,但它已经在那里了。

    最新版本的 MSBuild (16.8+) 可以通过同时传递 -p:PassOutputPathToReferencedProjects=False 来抑制此全局属性的流动(引入 by this PR)。

    【讨论】:

      猜你喜欢
      • 2012-10-05
      • 2015-03-05
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 2022-12-23
      • 1970-01-01
      • 2019-04-16
      • 2011-08-02
      相关资源
      最近更新 更多