. Net PackageReference, явно определить версию зависимого пакета - PullRequest
0 голосов
/ 26 марта 2020

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

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

enter image description here

и в другом проекте я использую пакет 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 подход: enter image description here

Ответы [ 2 ]

1 голос
/ 27 марта 2020

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

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

1 голос
/ 27 марта 2020

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

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

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

enter image description here

Решение

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

Обновление 1

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

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

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

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

Как предложение , вы должны использовать два шага, чтобы освободить его. Сначала очистите кеш nuget * сначала 1063 *.

  • Установите последнюю версию Moq 4.13.1, а затем установите пакет nuget AutoFixture.AutoMoq 4.11.0.
...