.Net PackageReference, явно определить версию зависимого пакета

В одном из моих проектов я использую пакет AutoFixture.AutoMoq, который зависит от пакета Moq.

<!-- 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, я получаю сообщение о том, что оно не применяется к проектам, использующим подход PackageReference: < a href="https://i.stack.imgur.com/09i59.png" rel="nofollow noreferrer">введите описание изображения здесь


person tommyk    schedule 26.03.2020    source источник
comment
Привет, Томмик, какие-нибудь обновления по этой проблеме? Кажется, это проблема PackageReference, и я уже сообщил об этом соответствующему персоналу. Вы можете проверить это и добавить любую полезную информацию по этой ссылке. Чтобы использовать последнюю зависимость Moq на данный момент, вы должны установить последнюю версию Moq, а затем AutoFixture.AutoMoq.   -  person LoLance    schedule 31.03.2020
comment
Форум DC установил приоритет вашего запроса, и я думаю, вы можете получить то, что хотите, от ссылка. Вы можете проверить это.   -  person LoLance    schedule 02.04.2020


Ответы (2)


Как сообщить Visual Studio/nuget явно использовать запрошенную версию?

На самом деле это можно сделать. Вы должны изменить Dependency behavior на Highest в интерфейсе диспетчера пакетов NuGet, что означает, что будут установлены все последние версии зависимостей в требуемом диапазоне версий.

Обратите внимание, что все они реализованы в рамках зависимостей, указанных в пакете. Moq (>= 4.1.1308.2120 && < 5.0.0)

введите здесь описание изображения

Решение

Щелкните проект правой кнопкой мыши -->Manage Nuget packages--> измените Dependency behavior на Highest в разделе Параметры в области, показанной на изображении выше.

Обновление 1

Извините за то, что эта функция (так же, как использование DependencyVersion highest) применяется к формату packages.config, а не PackageReference. И этот вариант поддерживает только формат packages.config. См. эту ссылку. Когда вы используете формат PackageReference, эта опция будет игнорироваться.

Кроме того существует также похожая проблема, которая была обсуждаем это давно и до сих пор встречается в последней версии VS.

Из-за этого я сообщил об этой проблеме на нашем форуме DC, и вы можете проголосовать за нее или добавить комментарии в эта ссылка, если я пропущу другую подробную информацию. Любой, кто заинтересован в этом, проголосует за него, чтобы как можно скорее привлечь внимание Microsoft.

Так что это не может быть достигнуто за один шаг.

В качестве предложения вам следует выполнить два действия, чтобы освободить его. Во-первых, сначала очистите кеши nuget.

  • Установите последнюю версию Moq 4.13.1, а затем установите пакет nuget AutoFixture.AutoMoq 4.11.0.
person Mr Qian    schedule 27.03.2020
comment
Когда я попробовал это, я получил сообщение Эти параметры неприменимы к проектам, управляющим своими зависимостями через project.json или PackageReference , см. мой снимок экрана выше. - person tommyk; 27.03.2020

В настоящее время NuGet не предлагает никакого способа управления версиями, используемыми для транзитивных зависимостей. В настоящее время разрабатывается предложение, в котором рассматривается сценарий.

Добавив PackageReference в Moq напрямую (даже если это уже подразумевается), вы сможете закрепить версию, поскольку теперь она является основной зависимостью.

person Jimmy    schedule 27.03.2020