【问题标题】:PackageReference condition is ignored for old project format旧项目格式忽略 PackageReference 条件
【发布时间】:2019-12-17 11:06:42
【问题描述】:

我正在尝试通过使用 Directory.Builds.props/Directory.Build.targets 文件来集中我们的一些项目配置。不幸的是,我们混合了新旧(sdk 风格)项目格式。由于某些功能在新格式中不可用,因此并非我们所有的项目都可以转换为新格式。

我遇到的问题是我想让我们所有的测试项目自动引用某些 nuget 包。对于新格式的项目,这很好用。然而,旧格式的项目似乎忽略了我指定的 PackageReferences 的任何条件。我对条件使用什么似乎并不重要。

这是一个非常简单的 Directory.Build.Targets 文件的示例:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
  <ItemGroup>
    <PackageReference Include="Moq" Version="4.12.0" Condition="False" />
  </ItemGroup>
</Project>

在这种情况下,我永远不会看到任何项目中包含 Moq 包。 对于旧格式的所有项目,它都包含在内。

我也尝试过使用条件:

  • ItemGroup 本身
  • 选择/何时阻止

另一方面,对属性组或属性设置条件可以按预期工作。

我没有在文档中看到任何关于 ItemGroup 或 PackageReference 不支持条件的内容。 有什么我想念的吗?

谢谢

【问题讨论】:

    标签: msbuild conditional-statements itemgroup packagereference


    【解决方案1】:

    我不相信非 SDK 项目支持PackageReference;我怀疑无论您指定的任何条件如何,它们都会被忽略。 检查与项目文件在同一目录中的 packages.config 文件 - 如果我是正确的,它存在并引用有问题的包.

    【讨论】:

    • 非 SDK 项目支持 PackageReference。这不是这些项目的默认设置。我们所有的项目都使用 PackageReferences 并且没有 package.config 文件。
    • 我的错误。感谢您确认没有packages.config。我被难住了。
    • 考虑使用优秀的开源 MSBuild 二进制和结构化日志查看器 (msbuildlog.com),看看您是否可以发现该包引用是如何添加的。
    • 我尝试调查日志文件,但没有成功。我找不到有关此 PackageReference 来自何处的任何信息。
    • 无赖。恐怕我已经没有点子了。
    【解决方案2】:

    Nuget docs 当前状态:

    您可以使用条件来控制是否包含包,其中条件可以使用任何 MSBuild 变量或在目标或道具文件中定义的变量。不过目前只支持TargetFramework变量。

    我的经验是 Condition="" 被 Visual Studio 忽略,但受到 msbuild 命令行的尊重。但是,在我的测试中,&lt;Choose&gt;&lt;When Condition=""&gt; 块似乎确实受到两种工具的尊重。

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      相关资源
      最近更新 更多