Ошибка публикации сайта 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" />

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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.