Laden...

Wie deploye ich eine Blazor Webassembly App?

Erstellt von CoderboyPB vor 3 Jahren Letzter Beitrag vor 3 Jahren 2.949 Views
C
CoderboyPB Themenstarter:in
327 Beiträge seit 2008
vor 3 Jahren
Wie deploye ich eine Blazor Webassembly App?

Vorweg, ich habe es hinbekommen, ich habe meine App auf in einen Ordner auf dem Desktop gepublished.

den Inhalt dieses Ordners habe ich dann in den physikalischen Webseiten Ordner vom IIS kopiert, und es funktionierte nicht.

Dann habe ich den Inhalt von <Desktop><PuplishFolder>/AppName/dist in den physikalischen Ordner kopiert, und dann funktionierte es.

Meine Frage nun:
Wofür sind die ganzen DLLs im obersten Publish Ordner, wenn ich doch nur den Inhalt aus 'dist' brauche?

Finde das ziemlich verwirrend, zumal ich ja eigentlich auch sowas wie im dist Ordner direkt als Publish Ordner erwartet hatte ...

  1. Frage:
    Das was da im dist Ordner dann ist, braucht doch keine ASP NET Core Unterstützung, das müsste doch auch auf einem einfachen Apache Server (XAMP) laufen, oder habe ich da etwas falsch verstanden?
16.806 Beiträge seit 2008
vor 3 Jahren

Blazor kann in Form der Client Anwendung sogar von einem statischen Laufwerk aus gestartet werden.
In der Cloud ein einfacher Blob Storage, eine Azure Static WebApp.

Blazor Webassembly ist eine Applikation, die im Client läuft; nicht auf dem Server.
Wie Angular, oder andere SPA/PWA.

Auch wenn Blazor den Syntax einer Serveranwendung hat, muss Blazor programmiert werden, als sei es eine Client/Desktop-Anwendung.
Wer das nicht beachtet, wird relativ schnell auch den Browser zum Absturz bringen.

Lies Dir dazu nochmal die Basics (What is Blazor?) und das Hosting (Host and deploy ASP.NET Core Blazor) durch.

Dann habe ich den Inhalt von <Desktop><PuplishFolder>/AppName/dist in den physikalischen Ordner kopiert, und dann funktionierte es.

So deployed man halt auch keine Anwendung.

Es gibt nicht umsonst den CLI Befehl dotnet publish

C
CoderboyPB Themenstarter:in
327 Beiträge seit 2008
vor 3 Jahren

Ich habe doch den Publish Befehl benutzt, nicht in der Konsole aber in Visualstudio: Rechtsklick auf den Projektnamen, dann auf 'Veröffentlichen'.
Oder ist das nicht dasselbe?

Hier habe ich dann das veröffentlichen in einen Folder gewählt, und einen auf dem Desktop gewählt (reine Bequemlichkeit, hätte auch woanders hin publishen können)

Diesen Inhalt habe ich dann ins physikalische Verzeichnis der IIS Webseite kopiert.
Statt dessen gehört da aber nur der Inhalt aus dem Unterverzeichnis 'dist' rein.

Deshalb war meine Frage, wofür sind im Rootverzeichnis des Publish Folders all die ganzen DLL Datein, die man ja eigentlich nicht braucht (bzw. scheinbar doch, sonst wären sie nicht dort, aber wozu nun?)

Was Blazor Webassembly ist, und was der Unterschied zu Blazor Server ist, ist mir eigentlich klar, nur wie gesagt, ich verstehe den Overhead nicht, denn eine gepublishte Blazor Webassembly App sollte doch eigentlich nur noch aus statischen Dateien bestehen.

übrigens bekomme ich, wenn ich die erzeugte index.html anklicke und damit die Seite auf einem Filesystem ausführe folgende Fehlermeldung:

Loading...
An unhandled error has occurred. Reload ???

Auffem IIS Server aber funktioniert es.

16.806 Beiträge seit 2008
vor 3 Jahren

Du redest von einer Blazor WebAssembly, was zumindest mal das Projekt beschreibt.
Problem: Du gibst keinerlei Informationen, ob Du ASP.NET Core Hosting oder gar PWA im Scaffolding aktiviert hast oder nicht. Geschweige denn welche Blazor Version Du verwendest... Wir müssen raten.

Oder ist das nicht dasselbe?

Natürlich ist es nicht das selbe.

Visual Studio ist eine Entwicklungsumgebung. Die Publish Funktion von Visual Studio kann durchaus das gleiche wie dotnet publish - eben aber auch viel mehr.
Das Publish über Visual Studio läuft über Profile: Azure, Files, FTP....

Problem: Du sagst nicht, wie Du publishst. Was ist Dein Profil?
Wir müssen raten.

damit die Seite auf einem Filesystem ausführe folgende Fehlermeldung:

Das ist auch korrekt so, weil ein Browser Dateien über Direktzugriff des Filesystem anders behandelt als über einen Web-Request.
Aber hat auch niemand davon gesprochen, dass man so Blazor öffnen könnte (übrigens geht das i.d.R. auch mit anderen JavaScript SPAs nicht; außer man beachtet paar Dinge).

Dazu spuckt der Browser meist die Fehler in die Console. Die erwähnst Du hier nicht.
Wir müssen raten.

Deshalb war meine Frage, wofür sind im Rootverzeichnis des Publish Folders all die ganzen DLL Datein

Weil Du mit Web Assembly arbeitest. Daher habe ich Dich auf die Basics verwiesen.

Blazor läuft im UI Thread des Browsers - aber halt nicht einfach mit Magie. Normalerweise wird eine initiale JavaScript-Datei (glaube blazor.js) aufgerufen, die dann die DLLs in den Browser nachlädt.
Ausgeführt werde sie nicht auf dem Server, sondern (aktuell noch) in der Mono-Runtime via WASM.

Daher müssen die DLLs mitgeliefert werden; normalerweise liegen die aber in einem Unterordner _framework.

Mit .NET 5 kann man die ganzen Referenzen statisch zu einer einzigen DLL kompilieren.
Basics zu WASM: https://webassembly.org/

Aber: ich hab keine Lust zu raten, daher kann ich Dir hier nur auf die offiziellen Docs verweisen.

C
CoderboyPB Themenstarter:in
327 Beiträge seit 2008
vor 3 Jahren

Also:
Bei der App handelt es sich um die Visual Studio Vorlage für eine Blazor App, für welche ich dann im zweiten Auswahlschritt die Option Webassembly verwende.

Ich ändere an der App nichts, es geht alleine um das erfolgreiche publishing und Hosting im IIS.

Dann publishe ich die App in dem ich die Option Folder wähle.

Was ich über Webassembly im Allgemeinen weiß, nachdem ich mich mal mit der Funktions- und Nutzungsweise (nicht ihrer Programmierung) auseinander gesetzt hatte, da ich im Unklaren war, WIE ich sie einsetze, ist, dass es eine *.wasm Datei ist, welche via eines Javascript Codes geladen und damit ihre Funktionen als JS Funktionen verfügbar gemacht werden.

Also erwarte ich im publish Folder in etwa folgendes:

  • eine html Startseite
  • eine .wasm Datei, welche die Funktionalität enthält
    mindestens eine JS Datei, die die WebAssembly lädt und die Funktionslogik der SPA enthält, alternativ kann das auch in zwei Dateien gesplittet werden.
  • die statischen Dateien wie CSS oder Bootstrap, Images, etc

Das finde ich (fast) so im <Publish>/Projektname/dist Ordner.

Aber oberhalb im Publish Ordner sind noch etliche DLLs, welche ich nicht brauche. Nochmal, ich kopiere nur den Inhalt von dist in den IIS.

Und meine Frage reduziert sich jetzt darauf, was soll ich mit diesen DLLs, warum beschränkt sich das Publishing nicht auf alleine die Files, die der ganz normale Webserver braucht? Das ist alles ...

P
441 Beiträge seit 2014
vor 3 Jahren

Oberhalb des publish Verzeichnisses liegt das, was beim kopilieren der App erzeugt wird.
Sinnvollerweise muss das ja auch irgendwo sein 😃

Übrigens, liegt das nur dort, wenn ich das standard publish Verzeichnis wähle.
Gebe ich ein anderes an, liegt dort nur die fertig App.


C:\Users\marco\source\repos\temp\BlazorApp1\BlazorApp1> rm -force -recurse bin
--> bin verzeichnis weg

C:\Users\marco\source\repos\temp\BlazorApp1\BlazorApp1> dotnet build -c release
--> bin/Release/netstandard2.1/ voll mit kompilat

C:\Users\marco\source\repos\temp\BlazorApp1\BlazorApp1> rm -force -recurse bin
--> bin verzeichnis weg

C:\Users\marco\source\repos\temp\BlazorApp1\BlazorApp1> dotnet publish -c release
--> bin/release/netstandard2.1/ voll mit kompilat
--> bin/release/netstandard2.1/publish/ beinhaltet App

C:\Users\marco\source\repos\temp\BlazorApp1\BlazorApp1> dotnet publish -c release -o c:\tmp
--> c:\tmp hat den Inhalt wwroot & web.config

Gleiches passiert auch, wenn ich per VS FolderProfile Publish Profil irgendwohin publishe.

C
CoderboyPB Themenstarter:in
327 Beiträge seit 2008
vor 3 Jahren

Danke 😃

C
CoderboyPB Themenstarter:in
327 Beiträge seit 2008
vor 3 Jahren

Ich glaube ich habe es jetzt:

Der Browser selber kann die DLLs nicht ausführen, sondern nur Javascript.
JS lädt die *.WASM Datei und diese wiederum nutzt die DLLs?

Ist das jetzt so richtig?

16.806 Beiträge seit 2008
vor 3 Jahren

Genau deswegen hab ich Dich auf webassembly.org geschickt.

Aber dann eben hier noch mal der Wiki Eintrag: WebAssembly
Dann siehst Du selbst, dass das nicht ganz stimmt, was Du denkst 😉

=> WebAssembly ist eine parallele Runtime zu JavaScript; aber hat aus Kompatibilitätszwecken eine direkte Verbindung zur JavaScript-Runtime.
Der Browser "führt" am Ende sehr wohl die DLLs aus: über WASM.

T
73 Beiträge seit 2004
vor 3 Jahren
Nochmal Hilfe bitte

Also ich bekomme ein standalone serverless publish nicht hin:

dotnet publish -c Release -o Y:\TestX

erzeugt im Verzeichnis alle Files, aber die index.html hängt beim laden.

Kann mir bitte jemand auf die Sprünge helfen!?

p.s. ich benutze VS Code und nicht VS...

16.806 Beiträge seit 2008
vor 3 Jahren

Schau in die Browser Console (meist F12) welchen Fehler Du bekommst.
Wenn die Seite lädt hat das selten was mit dem Deployment zutun.