Содержимое пакета Nuget в Visual Studio - PullRequest
0 голосов
/ 03 мая 2020

Я создал небольшой проект в Visual Studio 2019, который использует содержимое пакета NuGet (SQLite). Когда я строю свой проект в Visual Studio и запускаю его в режиме отладки, все работает нормально. Но когда я копирую встроенные файлы из выходного каталога в другой каталог или на другой компьютер, происходит сбой, сообщая мне, что он не находит файлы из пакета NuGet.

Для используемого пакета NuGet он отсутствует два файла. Когда я копирую эти два отсутствующих файла из каталога пакета NuGet в файлы моего проекта, он снова работает.

Но действительно ли это путь к go? Допустим, мой проект становится все больше и ему требуется все больше и больше пакетов NuGet. Нужно ли мне угадывать для каждого пакета NuGet, какие файлы мне могут понадобиться и где я могу найти эти файлы на своем жестком диске?

Другое дело, что я нашел файлы из пакета NuGet где-то в моем каталоге пользователя Windows, а не в моем каталоге кода. Поэтому, если я заархивирую свой код и передам его кому-нибудь другому или через некоторое время воспользуюсь, в коде отсутствуют пакеты NuGet.

Итак, вот мои вопросы:

1) Есть ли способ сказать Visual Studio, чтобы он автоматически копировал все необходимые файлы из всех используемых пакетов NuGet в выходной каталог?

2) Можно ли сохранить загруженные пакеты NuGet где-нибудь ближе к моему исходному коду а не в моем windows каталоге пользователя? Я хотел бы просто заархивировать один каталог для резервного копирования всех моего исходного кода.

Я быстро просмотрел события после сборки, чтобы, возможно, скопировать все отсутствующие файлы в выходной каталог в событие после сборки, но это не может быть способом go, так как мне все еще нужно знать, какие именно файлы мне нужно копировать и где их найти, и путь к указанным файлам может меняться с компьютера на компьютер.

1 Ответ

0 голосов
/ 04 мая 2020

Я думаю, что вы используете Формат управления Nuget PackageReference для управления пакетами nuget в своих проектах.

Формат nuget PackageReference напрямую ссылается на nuget из локального nuget кэша и не будет копировать пакеты nuget в ваш проект. Похоже, Ссылка ссылка . Это функция PackageReference .

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

Итак, прежде всего , вы должны выполнить восстановление nuget . И тогда вы можете вернуть отсутствующие пакеты на ваш агент.

Щелкните правой кнопкой мыши ваше решение в Solution Explorer -> Restore Nuget Packages

Есть ли способ сказать Visual Studio, чтобы он автоматически копировал все необходимые файлы из всех используемых пакетов NuGet в выходной каталог?

На самом деле , ранее была проблема со ссылкой на пакет время от времени содержимое пакета nuget терялось и не могло быть полностью скопировано в выходной путь. См. this .

Так что вы можете попробовать добавить это в ваш xxx.csproj файл:

<PropertyGroup>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

Можно ли сохранить загруженные пакеты NuGet? где-нибудь ближе к моему исходному коду, а не в моем windows каталоге пользователя? Я хотел бы просто заархивировать один каталог для резервного копирования всего моего исходного кода.

Windows каталог пользователя равен nuget global caches , и он загрузит все пакеты в таком виде Папка в вашем агенте, а затем проекты ссылается на пакет Nuget оттуда.

И также обратите внимание, что :

Работает в соответствии с текущим пользователем , а не текущим устройством. Это разработано этим. Все пакеты nuget хранятся в текущем каталоге уровня пользователя. Переключение учетных записей ОС не может получить пакеты nuget в другом каталоге пользователя.

И если вы хотите изменить его путь, вам следует изменить файл Nuget.Config (C:\Users\xxx(use r name)\AppData\Roaming\NuGet\NuGet.Config):

add эти узлы:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
....
<config>

    <add key="globalPackagesFolder" value="xxxxx(the custom path)" />
</config>
....

</configuration>

А затем перезапустите VS и пакеты nuget, которые вы установите позже, будут установлены в такой пакет.

Обновление 1

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

Для этих платных пакетов nuget вы должны выполнить другую операцию, а затем установить ее с сервера nuget.

Если пакет nuget необходимо оплатить или удалить с сервера nuget, операция восстановления не найдет пакет или не потребует вашего дополнительного дополнительного шага. И тогда операция восстановления завершится успешно.

Для этих старых заброшенных пакетов Nuget он существует в глобальном кеше Nuget вашего старого агента , так что в вашем старом агенте вы можете найти его.

Но при переносе проекта на нового агента, поскольку пакет nuget удаляется с сервера nuget, поэтому новый агент не находит его и не может восстановить такой пакет. Если у вас все еще есть старый пакет nuget в вашем старом агенте, вы можете перейти в новую среду, а затем настроить новый адрес на источник пакета nuget , после чего операция восстановления будет выполнена успешно.

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

...