0

在我的一个项目中,我使用依赖于Moq包的AutoFixture.AutoMoq包

<!-- project1.csproj -->
<PackageReference Include="AutoFixture.AutoMoq">
      <Version>4.11.0</Version>
</PackageReference>

在此处输入图像描述

在另一个项目中,我直接使用Moq包,即

<!-- project2.csproj -->
<PackageReference Include="Moq">
  <Version>4.13.1</Version>
</PackageReference>

问题是包版本解析期间的 Visual Studio / MSBuild / Nuget 总是选择最小依赖,即Moq 4.1.1308.2120 但我想使用最新版本的Moq 4.13.1。

如何告诉 Visual Studio/nuget 明确使用请求的版本?

更新:

当我尝试在 Nuget UI 中将依赖行为设置为最高时,我收到一条消息,指出它不适用于使用PackageReference方法的项目: 在此处输入图像描述

4

2 回答 2

1

目前 NuGet 不提供任何方法来控制用于传递依赖的版本。有一个提案正在进行中,将解决该场景。

通过直接将 PackageReference 添加到 Moq(即使它已经隐含),您将能够固定版本,因为它现在是主要依赖项。

于 2020-03-27T17:53:33.100 回答
1

如何告诉 Visual Studio/nuget 明确使用请求的版本?

实际上是可以做到的。您应该更改Dependency behaviorHighestNuGet 包管理器 UI下,这意味着它将安装所需版本范围内的所有最新版本的依赖项。

请注意,所有这些都是在包指定的依赖项范围内实现的。Moq (>= 4.1.1308.2120 && < 5.0.0)

在此处输入图像描述

解决方案

右键单击您的项目--> Manage Nuget packages--> 更改Dependency behavior为上图所示区域中的选项Highest下。

更新 1

抱歉,此功能(与 use 相同DependencyVersion highest)适用于packages.configformat 而不是PackageReference. 而且这个选项只支持 packages.config 格式。请参阅此链接。当您使用PackageReferenceforamt 时,它将忽略此选项。

此外,还有一个类似的问题已经讨论了很长时间,并且在最新的 VS 版本中仍然存在。

由于它,我已经在我们的DC 论坛中报告了这个问题,如果我错过了一些其他详细信息,您可以投票支持或在此链接中添加任何评论。任何对此感兴趣的人都会对其进行投票,以便尽快引起微软的注意。

所以不可能一步到位。

作为建议,您应该使用两个步骤来释放它。首先,首先清理 nuget 缓存

  • 安装最新版本4.13.1的起订量,然后安装 nuget 包AutoFixture.AutoMoq 4.11.0
于 2020-03-27T03:22:10.587 回答