So ändern Sie Azure App Service für 64-bit
Habe ich Probleme eine Anfrage an meinen 64-bit ASP.NET Kern-API läuft auf einem Azure App Service. Die Fehler, die ich zurück bekomme ist:
Unbehandelte Ausnahme: System.BadImageFormatException: Konnte nicht geladen, Datei oder assembly '***.dll". Ein es wurde versucht, ein Programm mit einem falschen format.
Ich verstehe, dass dies bedeutet, dass es eine Diskrepanz zwischen der Plattform des app (64-bit) und der Umgebung, es läuft. Ich kann einfach nicht herausfinden, wie man die App verändern-Service, damit es läuft mit 64-bit.
In die Einstellungen der Anwendung im Azure-portal habe ich Plattform auf 64-bit:
Allerdings, wenn ich check-in Kudus, die die Laufzeitumgebung anzeigt, dass es Betrieb unter win8-x86:
Projekt.json
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true,
"platform": "x64"
},
"runtimes": {
"win10-x64": {}
}
Einige Fragen
- Wie ändere ich die App-Service zu gewährleisten, es läuft auf einem 64-bit-Plattform?
- Spielt es eine Rolle, dass die RID ist
win8...
wenn meine Laufzeiten Konfiguration inproject.json
gibtwin10...
. Vermutlich x86 vs x64 ankommt, aber muss es die gleiche version von windows zu ie. win8 vs win10.
- Ich bin mit dem gleichen Problem. Gibt es ein update auf dieser?
- Danke für die Erinnerung - ich werde aktualisieren, eine Antwort bekam ich vom support
- Fixiert es, indem Sie die im Veröffentlichen Profil der Zielgruppe zu gewinnen-x64
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser ist ab sofort in Azure App Service.
Schritte zu implementieren:
dotnet publish
fügen Sie einfach-r win-x64
)Die Dokumentation ist hier aber (derzeit) es ist anerkannt, um ein wenig spärlich.
Diese github Frage-Antwort schlägt vor, wir sollten in der Lage sein zu tun, ein framework-abhängigen deployment-und haben es "einfach funktioniert". YMMV, aber das war nicht meine eigene Erfahrung daher die Laufzeit-flag Vorschlag oben
TLDR; 64 bit .NET-core-Prozesse mit Hilfe der .NET-core-runtime (im Gegensatz zu den .NET Framework-Laufzeit) werden noch nicht unterstützt, die auf Azure, aber geplant ist in der Zukunft kommen wird.
Das folgende ist aus Diskussionen, die ich mit Microsoft Azure zu unterstützen.
Der 64bit/32bit-Konfiguration auf Azure-portal (siehe oben in meinem screenshot), steuert den IIS w3wp.exe Prozess. Die w3wp.exe Prozess leitet Anforderungen an Ihre NETTO-core-Prozess. Die Konfiguration hat keinen Einfluss auf die Bitanzahl des .NET-core-Prozess. Es ist ein bisschen verwirrend, aber erklärt, warum ändern sich die Plattform-option in die screneshot oben hatte keine Wirkung.
Basierend auf dem PATH-environment-variable Einstellung der app-service, dotnet.exe zugeordnet ist die 32bit, das ist "D: \Program Files (x86)\dotnet\dotnet.exe". Die 64bit-runtime von .NET core ist nicht pre-installiert in den app-Diensten, wie ein Ergebnis, es ist derzeit nicht verfügbar.
Microsoft plant zum hinzufügen von 64-bit-Unterstützung .NET-core-Anwendungen auf .NET-core-runtime, die in Azure, aber es hängt von einem zukünftigen update der .NET-core-tools-chain. Sie gab mir eine geschätzte interne Datum aber ich habe versprochen, ich würde nicht teilen, auch öffentlich.
Einen workaround, der mir gegeben wurde zu nutzen die ASP.NET Kern (mit .net framework) von visual studio-Vorlage, nicht die ASP.NET Kern (mit .net core) ein. Dass man lädt die 64bit .Net framework-Laufzeit für Ihr ASP.Net Kern-web-Anwendung. Diese erfordern ein wenig von migration arbeiten, und ich davon ausgehen kann nicht möglich sein, für einige Projekte.
Glück konnte ich swap auf 32-bit-Versionen von einigen meiner Abhängigkeiten, die gemeint die app arbeitete in der Azure-Umgebung. Leider ist dies nicht viel bedeuten, diejenigen, die nicht über diese option, und ich bin sicher, es gibt viele.
Wenn Sie eine 64-bit-Laufzeit, gibt es 4 Möglichkeiten, dies zu tun:
Sehen Sie mehr details auf, wie es in dem link unten:
https://blogs.msdn.microsoft.com/webdev/2018/01/09/64-bit-asp-net-core-on-azure-app-service/
Credits: Glenn Condron
dotnet veröffentlichen-Befehl generiert eine web.config-Datei, die verwendet wird, die von IIS zu starten, dotnet Prozess. In Kudu, in die PATH-Umgebungsvariable dotnet.exe ist von D:\Program Files (x86)\dotnet
Lösung ist, ersetzen Sie in dieser Datei nach dem build
mit: