Ошибка публикации сайта ASP.NET Core 3.1 в Azure из Visual Studio 2019

10

У меня есть существующее приложение ASP.NET Core 3.0, которое успешно развернуто в службе приложений Azure (с помощью AspNetCoreModuleV2модуля). После обновления приложения до (сегодняшнего выпуска) ASP.NET Core 3.1 приложение правильно собирается и работает в моей локальной версии IIS Express . Однако при попытке публикации в службе приложений Azure с использованием (сегодняшняя версия) Visual Studio 16.4 я получаю следующую ошибку:

Файл ресурсов 'C: \ Project \ obj \ project.assets.json' не имеет цели для .NETCoreApp, Version = v3.0. Убедитесь, что восстановление выполнено и что вы включили netcoreapp3.0 в TargetFrameworks для вашего проекта.

Ноты

  • Все <PackageReference>«с до Microsoft.AspNetCore, Microsoft.EntityFrameworkCoreи Microsoft.Extensionsбыли обновлены3.1.0
  • Я очистил свое решение и даже поразил мою objпапку, чтобы убедиться, что не осталось никаких ссылок.
  • Эта ошибка генерируется из 3.1.100версии Microsoft.PackageDependencyResolution.targets.

Я понял, что что- то все еще висит на зависимостях .NET Core 3.0 . Но неясно, почему это вызывает проблемы только во время развертывания. Являются ли Azure App Service это еще не готов к .NET Ядра 3.1 ? Или это проблема с целями разрешения зависимостей?

Джереми Кейни
источник
Спасибо @Panagiotis Kanavos за пометку этого asp.net-core-3.1. Мне не хватало необходимой репутации для создания нового тега.
Джереми Кейни
Очевидно, что моим следующим шагом будет начать с нового шаблона проекта ASP.NET Core 3.1 , попытаться развернуть его в новой службе приложений Azure , а затем снова ввести зависимости, пока я не смогу воспроизвести проблему. У меня не будет времени сделать это до конца этой недели. До тех пор я надеялся, что кто-то еще может понять эту ошибку или найти решение самостоятельно.
Джереми Кейни
В документах показано, как явно выбрать версию .NET Core SDK . Вы пробовали это? SDK 3.1 появляется в списке?
Панайотис Канавос
@PanagiotisKanavos: этот проект еще не опубликован с использованием конвейеров Azure . Тем не менее, это действительно напоминает мне , что есть также<TargetFramework> настройки в pubxmlпрофиле , что Visual Studio опирается на, который я разнесенный на. К сожалению! Изменение, чтобы netcoreapp3.1соответствовать csprojцели решает немедленную проблему. (Это создает новую проблему, связанную с тем, что сама служба приложений Azure срабатывает на цели, но, вероятно, ее можно решить с помощью автономного развертывания, аналогично предоставленной вами ссылке.) Спасибо, что указали мне правильное направление!
Джереми Кейни
1
Хорошо, слава богу, что нашли этот вопрос (и ответ). Я начинаю испытывать разочарование по поводу принятия изменений в MS (по их рекомендации и воодушевлению) только ради того, чтобы продолжать сталкиваться с такими проблемами.
Фрэнк

Ответы:

14

Непосредственная проблема - как определено в первоначальном вопросе - связана с двумя местами, где <TargetFramework>она установлена:

  1. Файл проекта (например, csproj)
  2. Публикации профиля (т.е. pubxml)

<TargetFramework>Должны быть обновлены в обоих местах, и они должны соответствовать точно . В противном случае публикация не сможет найти свои цели в project.assets.jsonфайле, который построен на основе <TargetFramework>этого csjprojфайла.

Примечание. Можно ожидать, чтоpubxmlфайл будет отложен до<TargetFramework>установленного вcsprojфайле, но это не так.

Текстовый редактор

Чтобы сделать эту модификацию через текстовый редактор,

  1. Откройте ~/Properties/PublishProfilesпапку.
  2. Откройте файл, который *.pubxmlвы хотите редактировать.
  3. Измените значение <TargetFramework>на netcoreapp3.1:
<TargetFramework>netcoreapp3.1</TargetFramework>

Visual Studio 2019

Чтобы внести эту модификацию через среду разработки Visual Studio 2019 ,

  1. Нажмите на значок шестеренки на панели инструментов публикации в Интернете одним щелчком мыши (она находится справа от значка публикации).
  2. Предполагая , что Target Framework будет не установлен netcoreapp3.1, нажмите на значок редактирования рядом с ним.
  3. Убедитесь, что для Target Framework установлено значение netcoreapp3.1.
  4. Нажмите Сохранить .

Предупреждение: при использовании IDE вы можете столкнуться с проблемой здесь. При редактировании профиля вы, скорее всего, увидите новое значение из вашего файла проекта (т.е.netcoreapp3.1), которое уже выбрано. Однако при нажатии кнопки « Сохранить» он вернется к исходному значению (например,netcoreapp3.0в моем случае). Это потому, что вы на самом деле не изменили значение в интерфейсе, который Visual Studio ошибочно принимает за отсутствие изменений базовых значений. Если вы временно переключите другое значение (например, « Конфигурация» ), Visual Studio распознает, что произошло изменение, и оба значения будут обновлены в*.pubxmlфайле.

Еще раз спасибо @PanagiotisKanavos за то, что он указал мне правильное направление (см. Комментарии к оригинальной ветке).

Джереми Кейни
источник
Спасибо за размещение решения! Я боролся с этим, когда пытался опубликовать прошлой ночью, и это просто не имело никакого смысла. В мастере публикации он всегда выбирал 3.1 в качестве цели, поэтому я решил, что все в порядке, но как только я открыл pubxфайл, как вы объяснили, он все еще был на 3.0. Очень расстраивает. Честно говоря, с тех пор, как были выпущены VS 16.3 и .NET Core 3.0, у меня не было ничего, кроме странных, непонятных и полностью показывающих прекращение ошибок и проблем. Еще раз спасибо!
Gup3rSuR4c
ИДК, если вы тоже это получаете, но очень приятно, что, когда вы говорите, что он должен публиковаться как зависящий от фреймворка, он решает опубликовать весь фреймворк вместе с ним. Публикация, которая должна
длиться
К сведению: с тех пор, как я впервые опубликовал это, Microsoft обновила службы приложений Azure, чтобы обеспечить встроенную поддержку .NET Core 3.1 . Учитывая это, я удалил предупреждение относительно HTTP Error 500.30 - ANCM In-Process Start Failureсообщения из моего исходного сообщения. Ранее это требовало публикации полностью автономного дистрибутива вашего приложения. (Тем не менее, между сбросом новой версии .NET Core и его интеграцией в среду службы приложений Azure обычно задерживается 2-3 дня , поэтому полезно об этом знать в будущих обновлениях.)
Джереми Кейни
1
Хорошо, я только обновил версию фреймворка в свойствах проекта и даже не подумал о файле .pubxml. Это приводило к зависанию моей публикации, после обновления .pubxml до «netcoreapp3.1» все работало нормально. Спасибо
demoncodemonkey
2

Открыть папку проекта;

  • Перейдите в папку Свойства >> ОпубликоватьПрофили
  • Откройте файл FolderProfile.pubxml, затем измените версию 3.0 на 3.1

    netcoreapp3.1

  • Наконец, перестройте приложение перед публикацией

Кеннет Корир
источник
Хороший призыв к предоставлению явных инструкций для изменения pubxmlфайла вручную, и особенно учитывая глупость изменения этих значений через графический интерфейс Visual Studio 2019 . Я включил эти детали в свой первоначальный ответ, поэтому этот вариант подробно объясняется. Спасибо!
Джереми Кейни
0

изменение

<PackageReferenceInclude="Microsoft.AspNetCore"Version="2.2.0" />
 to 
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />

работает для меня.

Libertad
источник
1
Для ASP.NET Core 3.1 все Microsoft.AspNetCoreбиблиотеки должны быть обновлены 3.1.0в соответствии с примечаниями к выпуску Microsoft v3.1. Ваш подход может быть правильным решением для подобных проблем в ASP.NET Core 2.2 , если предположить, что ошибка не была вызвана несоответствием между вашими файлами csprojи pubxфайлами, как это было в моем случае.
Джереми Кейни
Версия двух вышеупомянутых пакетов в настоящее время находится в 2.2.0 и помечена как последняя версия.
Либертад
1
@Libertad, вам нужно обновить установку Visual Studio до версии 16.4.0, чтобы увидеть последнюю версию dot net core 3.1
navule
@navule мой VS обновлен. Пакеты Aabove - это просто пакет nuget. Взгляните на это: nuget.org/packages/Microsoft.AspNetCore и посмотрите его последнюю версию
Libertad