Пакет Nuget - несколько ошибок в руководстве Microsoft - PullRequest
0 голосов
/ 01 июня 2019

После руководства Microsoft по NuGet .NET Framework здесь .Я использую VS 2019.

Все идет хорошо, пока я не доберусь до пакета NuGet.Я получаю следующую ошибку:

'C: \ Users \ erics \ source \ repos \ AppLogger.vs \ AppLogger \ v16 \ Server \ sqlite3 \ db.lock', поскольку он используется другимprocess.

Папка .vs создается автоматически во всех моих проектах.Если я закрываю VS и удаляю папку, то она воссоздается.Если я закрываю решение и затем пытаюсь снова упаковать пакет, я получаю:

ПРЕДУПРЕЖДЕНИЕ: NU5100: сборка 'AppLogger \ bin \ Debug \ AppLogger.dll' не находится в папке 'lib' и, следовательно, онане будет добавлен в качестве ссылки, когда пакет установлен в проект.Переместите его в папку 'lib', если на него нужно сослаться.

ПРЕДУПРЕЖДЕНИЕ: NU5100: сборка 'AppLogger \ bin \ Release \ AppLogger.dll' не находится в папке 'lib' и, следовательно, она выигралане будет добавлено в качестве ссылки, когда пакет установлен в проект.Переместите его в папку 'lib', если на него нужно сослаться.

ПРЕДУПРЕЖДЕНИЕ: NU5100: сборка 'AppLogger \ obj \ Debug \ AppLogger.dll' не находится в папке 'lib' и, следовательно, она выигралане будет добавлено в качестве ссылки, когда пакет установлен в проект.Переместите его в папку 'lib', если на него нужно сослаться.

ПРЕДУПРЕЖДЕНИЕ: NU5100: сборка 'AppLogger \ obj \ Release \ AppLogger.dll' не находится в папке 'lib' и, следовательно, она выигралане будет добавлено в качестве ссылки, когда пакет установлен в проект.Переместите его в папку 'lib', если на него нужно сослаться.

Ответы [ 2 ]

1 голос
/ 01 июня 2019

Документы NuGet были написаны до того, как существовали проекты в стиле SDK (до создания .NET Core), и с тех пор по большей части не обновлялись.Поэтому учебники очень устарели.

Мой 30-секундный учебник по созданию пакетов NuGet:

Создайте проект "Библиотека классов (.NET Core)", даже если вы хотите настроить таргетинг.NET Framework.Вы также можете сделать это из командной строки, используя dotnet new classlib.Если вы хотите настроить таргетинг на .NET Framework, щелкните правой кнопкой мыши проект в обозревателе решений и выберите «редактировать файл проекта» (или отредактируйте csproj в вашем любимом текстовом редакторе) и измените значение <TargetFramework>netcoreapp2.2</TargetFramework> на <TargetFramework>net472</TargetFramework> или любое другое .NET.Версия Framework, которую вы хотите (удалите точки, чтобы 4.7.2 был 472, 4.7 - 47, а не 470).Наконец, щелкните правой кнопкой мыши проект в обозревателе решений и выберите Pack или выполните команду dotnet pack из командной строки.

Упаковка проектов в стиле SDK (или традиционных проектов с целями пакета MSBuild) значительно улучшена по сравнению с использованием nuget.exe pack и файлы nuspec, поэтому я настоятельно рекомендую использовать это вместо.Нам (команде NuGet) действительно нужно найти время для обновления документации.

0 голосов
/ 17 июня 2019

Я проверил учебник и воспроизвел ту же проблему.

Когда VS работает с открытым проектом AppLogger, папка .vs используется им.(Создайте новое решение и перейдите к SolutionDir, вы можете обнаружить, что .vs занят VS, поскольку мы не сможем удалить его, когда VS работает)

Согласно этому сообщению об ошибке, когдаиспользуя команду nuget pack , он также попытается прочитать некоторые данные из папки .vs. Но .vs был занят VS, и nuget.exe не может получить к нему доступ. Таким образом, возникает ошибка.

Я думаю, что для документа нужны дополнительные примечания, такие как:

Примечание. Для успешного запуска пакета nuget xxx.nuspec необходимо закрыть экземпляр VS перед ним.

Если я закрою решение, а затем снова попробую упаковать, я получу предупреждения:

Предупреждения указывают, что сборки, которые вы хотите упаковать, должны быть скопированы в папку libтак что проект, который загружает этот пакет, может получить сборку.Простой способ восстановить эту ошибку: Create a lib folder in the project folder and copy the xxx.dll into it. Then use the nuget pack command again.

Тогда созданный нами xxx.nupkg содержит сборку.Создайте новый проект .net fx, загрузите xxx.nupkg, теперь мы можем правильно ссылаться на AppLogger.dll.

(Кроме того, по-прежнему отображается предупреждение: ПРЕДУПРЕЖДЕНИЕ: сборка 'lib \ AppLoggerSampleMyTest.dll' помещается непосредственно в папку 'lib'. Рекомендуется размещать сборки в папке, специфичной для фреймворка. Переместитьэто в специфичную для фреймворка папку.) Но это всего лишь предупреждение, которое предлагает помочь создать лучшую структуру пакета nuget.

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

(Если они находятся в одном решении, щелкните правой кнопкой мыши проект => add =>, если не в том же решении, вы можете щелкнуть правой кнопкой мыши решение => добавить существующий проект, чтобы включить проект библиотеки классов)

...