Błąd podczas publikowania witryny ASP.NET Core 3.1 na platformie Azure z programu Visual Studio 2019

9

Mam wcześniej istniejącą aplikację ASP.NET Core 3.0 , która została pomyślnie wdrożona w usłudze Azure App Service (przy użyciu AspNetCoreModuleV2modułu). Po uaktualnieniu aplikacji do (dzisiejsza wersja) ASP.NET Core 3.1 aplikacja kompiluje się i działa poprawnie na mojej lokalnej wersji IIS Express . Podczas próby opublikowania w usłudze Azure App Service przy użyciu (dzisiejszej wersji) programu Visual Studio 16.4 pojawia się jednak następujący błąd:

Plik zasobów „C: \ Project \ obj \ project.assets.json” nie ma celu dla „.NETCoreApp, Version = v3.0”. Upewnij się, że proces przywracania został uruchomiony i że dołączono „netcoreapp3.0” do TargetFrameworks dla swojego projektu.

Notatki

  • Wszystko <PackageReference>„s do Microsoft.AspNetCore, Microsoft.EntityFrameworkCorei Microsoft.Extensionszostały zaktualizowane3.1.0
  • Wyczyściłem moje rozwiązanie, a nawet nukowałem mój objfolder, aby upewnić się, że nie ma żadnych odniesień.
  • Ten błąd jest generowany z 3.1.100wersji Microsoft.PackageDependencyResolution.targets.

Rozumiem, że coś nadal wisi na zależnościach .NET Core 3.0 . Ale nie jest jasne, dlaczego powoduje to problemy tylko podczas wdrażania. Czy usługa Azure App Service nie jest jeszcze gotowa na platformę .NET Core 3.1 ? Czy jest to problem z celami rozwiązywania zależności?

Jeremy Caney
źródło
Dziękuję @Panagiotis Kanavos za oznaczenie tego tagiem asp.net-core-3.1. Brakowało mi reputacji niezbędnej do utworzenia nowego tagu.
Jeremy Caney,
Oczywiście moim następnym krokiem będzie rozpoczęcie od nowego szablonu projektu ASP.NET Core 3.1 , próba wdrożenia w nowej usłudze aplikacji Azure , a następnie przywrócenie zależności, dopóki nie będę w stanie odtworzyć problemu. Nie będę miał czasu, aby to zrobić, do końca tego tygodnia. Do tego czasu miałem nadzieję, że ktoś inny może mieć wgląd w tego typu błędy lub sam znalazł rozwiązanie.
Jeremy Caney,
Dokumenty pokazują, jak jawnie wybrać wersję zestawu .NET Core SDK . Próbowałeś tego? Czy zestaw SDK 3.1 pojawia się na liście?
Panagiotis Kanavos,
@PanagiotisKanavos: Ten projekt nie został jeszcze opublikowany przy użyciu rurociągów Azure . Powiedział, że to nie przypominają mi, że istnieje również<TargetFramework> ustawienie w pubxmlprofilu, że Visual Studio opiera się na, na której rozmieszczone. Ups! Zmiana w netcoreapp3.1celu dopasowania do csprojcelu rozwiązuje natychmiastowy problem. (Wprowadza to nowy problem z wyzwalaniem samej usługi Azure App Service w celu, ale prawdopodobnie można go rozwiązać za pomocą samodzielnego wdrożenia, podobnego do podanego linku.) Dziękujemy za wskazanie mi właściwego kierunku!
Jeremy Caney,
1
Cóż, dzięki Bogu za znalezienie tego pytania (i odpowiedzi). Zaczynam się dość sfrustrować przyjmowaniem najnowocześniejszych zmian stwardnienia rozsianego (na ich zalecenie i zachętę) tylko po to, by napotykać takie problemy.
Frank

Odpowiedzi:

13

Natychmiastowy problem - jak wskazano w pierwotnym pytaniu - dotyczy dwóch miejsc, w których <TargetFramework>jest ustawiony:

  1. Plik projektu (np. csproj)
  2. Profil wydawniczy (tj pubxml)

<TargetFramework>Muszą być aktualizowane w obu miejscach, a oni muszą pasować dokładnie . W przeciwnym razie, wydawnictwa nie będą mogli znaleźć swoje cele w project.assets.jsonpliku, który jest zbudowany w oparciu o <TargetFramework>w csjprojpliku.

Uwaga: Można oczekiwać, żepubxmlplik zostanie odroczony do<TargetFramework>zestawu wcsprojpliku, ale tak nie jest.

Edytor tekstu

Aby dokonać tej modyfikacji za pomocą edytora tekstu,

  1. Otwórz ~/Properties/PublishProfilesfolder.
  2. Otwórz, *.pubxmlktóry chcesz edytować.
  3. Zmień wartość <TargetFramework>na netcoreapp3.1:
<TargetFramework>netcoreapp3.1</TargetFramework>

Visual Studio 2019

Aby wprowadzić tę modyfikację za pomocą programu Visual Studio 2019 IDE,

  1. Kliknij ikonę koła zębatego na pasku narzędzi publikowania jednym kliknięciem w sieci Web (znajduje się po prawej stronie ikony publikowania).
  2. Zakładając, że struktura docelowa nie jest ustawiona na netcoreapp3.1, kliknij ikonę edycji obok niej.
  3. Upewnij się, że struktura docelowa jest ustawiona na netcoreapp3.1.
  4. Kliknij Zapisz .

Ostrzeżenie: podczas korzystania z IDE możesz napotkać tutaj problem. Podczas edycji profilu prawdopodobnie zobaczysz nową wartość z pliku projektu (tj.netcoreapp3.1) Już wybraną. Jednakpo kliknięciu przycisku Zapisz nastąpi powrót do pierwotnej wartości (np.netcoreapp3.0W moim przypadku). Wynika to z faktu, że tak naprawdę nie zmieniłeś wartości w interfejsie, co Visual Studio myli z powodu braku zmianywartości podstawowych . Jeśli tymczasowo przełączysz inną wartość (np. Konfiguracja ), wówczas Visual Studio rozpozna, że ​​nastąpiła zmiana, i obie wartości zostaną zaktualizowane w*.pubxmlpliku.

Jeszcze raz dziękuję @PanagiotisKanavos za wskazanie mi właściwego kierunku (patrz komentarze do oryginalnego wątku).

Jeremy Caney
źródło
Dziękujemy za opublikowanie rozwiązania! Walczyłem z tym, kiedy próbowałem opublikować wczoraj wieczorem i to po prostu nie miało sensu. W kreatorze publikowania zawsze było wybrane 3.1 jako cel, więc pomyślałem, że było w porządku, ale kiedy otworzyłem pubxplik, jak wyjaśniłeś, nadal był w wersji 3.0. Bardzo frustrujące. Szczerze mówiąc, nie miałem nic oprócz dziwnych, niejasnych i całkowicie pokazujących zatrzymywanie błędów i problemów od czasu wydania VS 16.3 i .NET Core 3.0. Dzięki jeszcze raz!
Gup3rSuR4c,
Idk, jeśli również to otrzymujesz, ale to całkiem miłe, że kiedy powiesz mu, aby opublikowało jako zależne od frameworka, postanawia opublikować cały framework wraz z nim.
Publikacja,
Do Twojej wiadomości: Od kiedy to pierwotnie opublikowałem, Microsoft zaktualizował usługi Azure App Services, aby zapewnić natywną obsługę .NET Core 3.1 . Biorąc to pod uwagę, usunąłem ostrzeżenie dotyczące HTTP Error 500.30 - ANCM In-Process Start Failurewiadomości z mojej oryginalnej wiadomości. Wcześniej wymagało to opublikowania w pełni samodzielnej dystrybucji aplikacji. (To powiedziawszy, zwykle opóźnienie między nową wersją platformy .NET Core jest 2-3-dniowe a jej integracja ze środowiskiem usługi Azure App Service , więc warto o tym wiedzieć w przyszłych aktualizacjach.)
Jeremy Caney
1
Fajnie, zaktualizowałem tylko wersję frameworka we właściwościach projektu i nawet nie przyszło mi do głowy co do pliku .pubxml. Powodowało to zawieszanie się mojej publikacji, po zaktualizowaniu pliku .pubxml do „netcoreapp3.1” działało dobrze. Dzięki
demoncodemonkey
2

Otwórz folder projektu;

  • Przejdź do folderu Właściwości >> Publikuj profile
  • Otwórz plik FolderProfile.pubxml, a następnie zmień wersję 3.0 na 3.1

    netcoreapp3.1

  • Na koniec przebuduj aplikację przed opublikowaniem

Kenneth Korir
źródło
Dobre wezwanie do podania wyraźnych instrukcji pubxmlręcznej modyfikacji pliku, a zwłaszcza biorąc pod uwagę głupotę modyfikacji tych wartości za pomocą graficznego interfejsu użytkownika Visual Studio 2019 . Włączyłem te szczegóły do ​​mojej oryginalnej odpowiedzi, więc ta opcja jest wyraźnie wyjaśniona. Dziękuję Ci!
Jeremy Caney,
0

zmiana

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

pracuje dla mnie.

Libertad
źródło
1
W przypadku programu ASP.NET Core 3.1 wszystkie Microsoft.AspNetCorebiblioteki należy zaktualizować 3.1.0zgodnie z uwagami do wydania Microsoft v3.1. Twoje podejście może być poprawną poprawką dla podobnych problemów w programie ASP.NET Core 2.2 , zakładając, że błąd nie był spowodowany niedopasowaniem między tobą csproja pubxplikami, tak jak w moim przypadku.
Jeremy Caney,
Wersja dwóch wyżej wymienionych pakietów jest obecnie w wersji 2.2.0 i oznaczona jako najnowsza wersja.
Libertad,
1
@Libertad, musisz zaktualizować instalację programu Visual Studio do wersji 16.4.0, aby zobaczyć najnowszą wersję dot net core 3.1
Navule
@ anvule mój VS jest zaktualizowany. Pakiety Aabove to tylko pakiet nuget. Spójrz na to: nuget.org/packages/Microsoft.AspNetCore i zobacz jego najnowszą wersję
Libertad