Пакет Nuget необходим, хотя на него нет ссылки - PullRequest
0 голосов
/ 08 ноября 2019

В моем решении у меня есть проект верхнего уровня с кучей зависимых проектов. Один из зависимых проектов имеет обязательную ссылку на пакет Nest nuget. Поэтому в нашей конфигурации пакета nuget для решения Nest установлен только в проекте, который ссылается на него.

В проекте верхнего уровня есть ссылка на этот зависимый проект, но нет ссылок на пространство имен Nest. Он собирается без предупреждений или ошибок, однако во время выполнения у меня возникает проблема:

Could not load file or assembly 'Nest, Version=7.0.0.0, Culture=neutral, PublicKeyToken=96c599bbe3e70f5d' or one of its dependencies. The system cannot find the file specified.

Когда я вручную устанавливаю пакет Nest в свой проект верхнего уровня, он успешно выполняется без проблем.

Почему это происходит? Разве установка пакета Nest в зависимом проекте не должна разрешить эту зависимость?

1 Ответ

2 голосов
/ 08 ноября 2019

Один из зависимых проектов имеет обязательную ссылку на пакет Nest nuget.

Вы вызывали функцию Nest в зависимом проекте? VS не будет копировать сборку зависимого проекта в проект верхнего уровня, если обнаружит, что зависимый проект фактически не вызывает (не требует) сборку в коде.

Почему это происходит? Разве установка пакета Nest в зависимом проекте не должна устранить эту зависимость?

Я не уверен, что причина проблемы с информацией, доступной в вашем вопросе, может быть вызвана многими факторами, а иногдаВерсия VS также повлияет на это ...

Предполагается, что у вас есть проект верхнего уровня A, и это зависит от проекта B с использованием Project Reference.

1.Если оба они нацелены на .net framework, убедитесь, что они используют один и тот же способ управления пакетами nuget (оба используют packages.config или оба используют PackageReference )

2.If A - это проект .net framework, в то время как B - это проект .net standard, убедитесь, что A также использует формат PackageReference для управления пакетами nuget.

Причина .net standard (новый формат SDK) использует пакеты PackageReference, если A использует Packages.config и ссылку B, система сборки будет смущена различными форматами nuget в процессе сборки,И мы не найдем Nest.dll, скопированный из выходной папки B's в выходную папку A's.

В этом случае попробуйте добавить <RestoreProjectStyle>PackageReference</RestoreProjectStyle> в файл проекта верхнего уровня A. (xx. csproj) Это обеспечит возможность восстановления как A, так и B в стиле PackageReference.

3. Если A равно .net framework с packageReference, а B равно .net framework с Packages.config, щелкните правой кнопкой мыши packages.config и выберите кнопку Migrate Package.config to PackageReference. Также вы можете получить некоторую помощь из этого документа .

4.Если ваш проект верхнего уровня - ядро ​​.net, а проект B нацелен на стандарт .net, в VS2017 победа nest.dllЕсли вы не скопированы в выходную папку A, попробуйте добавить <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> в ваш A.csproj, чтобы решить эту проблему. Подобную проблему см. здесь . (И VS2019 16.3.8 исправил эту проблему, эта проблема в основном возникает в VS2017)

И это поведение также зависит от версии VS, если вы используете VS2017, пожалуйста, обновите его до последней 15.9.17 длялучший опыт. Если вы используете VS2019, обновите его до 16.3.8.

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...