Ошибка NU5012 - пакет nuget не может найти путь (/bin/release/MyProject/bin/release)

Я пытаюсь обновить пакет nuget, выполнив команду nuget pack -properties Configuration=Release но это дает мне следующую ошибку:

Невозможно найти "bin/Release/{имя-проекта}/bin/Release". Мэй уверен, что проект был построен

Я не совсем уверен, почему он переходит в мою папку Release, а затем продолжает переходить в другую папку Release, поскольку ее не существует? Я совершенно заблудился здесь, и я не уверен, что делать.

2 ответа

TL;DR

Для нового <Project Sdk="Microsoft.NET.Sdk"> Формат файла.csproj, используйте dotnet pack создавать пакеты NuGet, даже если они нацелены на.Net Framework или многоцелевые. Запустите это из каталога, содержащего ваши .csproj (и, возможно, .nuspec)

dotnet pack MyProject.csproj -c Release

Это также объединит любые .nuspec файл совпадает с именем проекта, учитывая $ Подстановка символов из версии и метаданных, установленных в вашем .csproj,

Более детально

Я также столкнулся с этой проблемой - в предыдущих версиях я обычно использовал этот подход для .csproj с .nuspec файл с тем же именем, чтобы я мог использовать все токены $, как $id$, $version$,

Однако при попытке этого против более нового <Project Sdk="Microsoft.NET.Sdk"> форматы csproj:

nuget pack {MyProject}.csproj -Prop Configuration=Release

Я получил ту же ошибку (обратите внимание на "дублирование" bin\release):

Ошибка NU5012: невозможно найти "bin\Release{MyProject}\bin\Release\". Убедитесь, что проект был построен.

И если бы я попытался упаковать против .nuspec содержащие символы (NuGet версия: 4.7.1.5393)

nuget pack {MyProject}.nuspec -Prop Configuration=Release

Я просто получаю бесполезное сообщение, потому что nuget не может автоматически разрешить токены $.

Значение не может быть нулевым или пустой строкой. Имя параметра: значение

Однако, используя пакет dotnet вместо Nuget

dotnet pack MyProject.csproj -c Release

Я добираюсь до того места, где я хочу быть, т.е. многоцелевого пакета NuGet с символами $ в .nuspec правильно синхронизированы с .csproj (Вы можете проверить это, открыв .nupkg файл, например, 7zip и изучения финала .nuspec файл в корне пакета)

У меня была та же проблема с многоцелевым проектом (нацеленным на net452 и netstandard2.0).

Мое исправление / хак состоял в том, чтобы добавить 'TargetFramework=net452' в список свойств, передаваемых Nuget, и вручную добавить вывод netstandard2.0 в раздел files в файле.nuspec-file.

Надеюсь, кто-то найдет лучшее решение

Часть ответа Руны (настройка TargetFramework=net471 NuGet свойство)

и используя NuGet версии 4.9.1 (инструкция здесь: /questions/11478517/nevozmozhno-upakovat-paket-nuget-v-vsts-nevozmozhno-privesti-obekt-tipa-systemstring-k-tipu-nugetframeworksnugetframework/11478529#11478529)

был способ пойти для меня.

На самом деле я просто решил проблему со своей стороны. Nuget может не найти скрытую dll. Вот мое решение:

  • Постройте проект;

  • Показать все файлы в Visual Studio, чтобы вы могли видеть скрытые файлы, чтобы вы могли видеть dll в папке bin;

  • Щелкните правой кнопкой мыши, откройте папку в проводнике файлов, затем скопируйте ее в текущую папку, чтобы они заменили / или отобразили файлы;

  • Сделайте "Nuget Pack" снова.

Другие вопросы по тегам