#c# #visual-studio #nuget #nuget-package #solution
#c# #visual-studio #nuget #nuget-пакет #решение
Вопрос:
Я хочу извлечь библиотеки DLL зависимостей NuGet, которые зарегистрированы в project package.config, из папки пакета.
package.config (пример):
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Humanizer.Core" version="2.6.2" targetFramework="net472" />
</packages>
Структура:
- Folder
- ProjectFolder
- packages.config <-- config file
- Packages
- Humanizer.Core.2.6.2
- lib
- netstandard1.0
- Humanizer.DLL
- netstandard2.0
- Humanizer.DLL
- Solution
Теперь я могу извлечь информацию из package.config
, чтобы получить идентификатор версию вместе, чтобы знать, в какой папке мне нужно находиться в Packages
папке. Тогда я уверен, что есть lib
папка, так что все в порядке. Но потом я застреваю. Причина в том, что lib
папка содержит netstandard1.0
и / или netstandard2.0
(или другие) папки, в то время как в package.config остался только targetFramework="247"
атрибут, который не соответствует.
Есть идеи, как мне с этим справиться? Может быть, я все делаю неправильно?
Ответ №1:
Получить библиотеки DLL зависимостей проекта в папке пакета из package.json
На самом деле, я в замешательстве, почему вы получаете targetframework="247"
. Интересно, изменилось ли это самостоятельно.
Поэтому, пожалуйста, запустите update-package -reinstall
в Tools -> NuGet Package Manager-> Консоль менеджера пакетов, чтобы переустановить ваш nuget и зависимости.
targetframework
in packages.config
файл означает версию фреймворка вашего текущего проекта. Это относится к версии framework вашего текущего проекта. Установите эти пакеты nuget в проект под этой версией фреймворка.
=======================================
Пожалуйста, обратите внимание, что:
Когда пакет nuget устанавливает свои зависимости, он использует правило, ближайшее к победе. Это установит зависимость, которая ближе к версии framework проекта.
Вы можете проверить этот документ о том, как NuGet разрешает зависимости пакетов.
Например, если ваш проект предназначен для netframework4.7.2
и имеет такие зависимости, как netframework 4.7.1
и netframework 4.6.2
, он установит версию зависимости, net framework4.7.1
которая ближе всего к основному проекту net472
.
Как ваше описание, Humanizer.Core
имеет зависимость типа net standard 1.0
и netstandard 2.0
,
Также, как сказано в этом документе,
Минимальная версия, поддерживаемая net standard 1.0
is net framework 4.5
, и минимальная версия, поддерживаемая net standard 2.0
is net standard 4.6.1
.
===========================================================
Если net framework 4.5
<= версия вашей основной платформы проекта < net framework 4.6.1
.
Пакет nuget установит зависимость от net standard 1.0
.
Если net framework 4.6.1
<= ваша основная версия project framework, пакет nuget установит зависимость от net standard 2.0
.
Если у вас есть зависимость от более новой версии и она совместима с вашим основным проектом, она установит последнюю версию.
Кроме, вы можете загрузить свой проект и проверить hintpath
содержимое xxx.csproj
файла, чтобы увидеть, какую версию зависимости использовал проект.
Если ваш проект нацелен на >= net framework 4.6.1
, он установит net standard 2.0
зависимость.
========================
Тест
И вы можете просто создать два проекта, которые нацелены на Net Framework4.5.2
и Net Framework 4.7.2
соответственно. А затем установите этот пакет в эти два проекта, чтобы увидеть поведение.
Комментарии:
1. Большое вам спасибо за ваш ответ! Я рассмотрю это позже в ближайшие дни и свяжусь с вами.
2. Спасибо за ваш отзыв. И я предлагаю вам протестировать это вовремя. ха-ха. в любом случае, это зависит от вас 🙂 Кроме того, если у вас есть какие-либо опасения, пожалуйста, не стесняйтесь, дайте нам знать вовремя. И если это поможет вам справиться с проблемой, пожалуйста, не забудьте принять это 🙂
3. Спасибо за вашу помощь, у меня было время исправить проблему. Я использовал файл xxx.csproj для извлечения путей зависимостей и использования путей. Итак, еще раз, спасибо 🙂
4. Небольшое примечание:
targetframework="247"
часть, которую я не редактировал вручную, и переустановка не внесла изменений в файлы и т.д.