3

我正在尝试通过使用 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 不支持条件的内容。有什么我想念的吗?

谢谢

4

2 回答 2

0

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

于 2019-08-12T12:25:22.690 回答
0

Nuget文档当前状态:

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

我的经验是Condition=""Visual Studio 忽略了它,但msbuild命令行却尊重它。但是,在我的测试中<Choose><When Condition="">,这两个工具似乎都尊重该块。

于 2021-11-17T23:15:35.670 回答