Ich versuche Turmfalke so zu konfigurieren, dass sie im Rohmodus auf einem bestimmten Port läuft. Wie dem auch sei, es scheint, dass die Datei launchsettings.json Befehlszeilenargumente übergeben muss, da es keine Straight-Up-Option gibt und sie immer auf Port 5000 läuft, was natürlich Konflikte verursacht, wenn Sie eine API und eine Website haben .
Also habe ich das CommandLine-Paket zu meiner Site hinzugefügt und Sie können tatsächlich builder.AddCommandLine () in der Datei startup.cs verwenden.
Das Problem ist, wie man die Argumente von der Datei program.cs zur Startup.cs bringt oder sie als eine statische Variable nachschlägt.
Art macht die Erweiterung Methode sinnlos, wenn Sie nicht auf die Argumente kommen können.
Gibt es bessere Möglichkeiten, dies zu tun?
AKTUALISIEREN
Ich habe tatsächlich gefunden, was elegantere Lösung scheint:
IConfigurationRoot
im Programm (verwenden Sie CommandLineApplication, gute Artikel und Beispiele hier ) IConfigurationRoot
an Startup
über den DI-Container. Wie so:
%Vor% Beispielhafte Implementierung von LoadConfiguration, die args und Builds analysiert IConfigurationRoot
(in diesem Beispiel kann der Name der Konfigurationsdatei in Befehlszeilenargumenten überschrieben werden):
ALTE ANTWORT
Sie können die Startup-Klasse selbst instanziieren und sie als Instanzen an WebHostBuilder übergeben. Es ist etwas nicht so elegant, aber machbar. Von hier.
%Vor%Einige Vorbehalte sind:
IStartup
implementieren, das für Configure
method in Parametern auf nur Configure(IApplicationBuilder app)
anstelle von Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime lifetime)
begrenzt ist.
applicationName
manuell wie in meinem Beispiel angeben. Ich teste das auf 2.0.0-preview1-final
Kestrel kann so konfiguriert werden, dass er auf verschiedene Arten auf einen anderen Port hört. Keine dieser Methoden muss in der Klasse Startup
stattfinden, sondern in der Methode Main
der Klasse Program
. Die Verwendung der Erweiterungsmethode AddCommandLine
ist eine davon. Um dies zu verwenden, ändern Sie die Main
-Methode Ihrer Program.cs-Datei wie folgt:
Führen Sie dann die Anwendung mit dotnet run --server.urls http://*:<yourport>
aus und ersetzen Sie dabei <yourport>
durch die tatsächliche Portnummer, auf der sie ausgeführt werden soll. Das *
lässt alle verfügbaren IP-Adressen abhören, wenn Sie eine bestimmte Adresse abhören möchten, müssen Sie sie dort anstelle von *
angeben.
Eine weitere Option zum Ändern des Ports besteht darin, die Methode .UseUrls
zu verwenden, um den Port und die Adresse fest zu codieren. Zum Beispiel:
In diesem Beispiel wird Ihre Anwendung Port 8080
auf allen verfügbaren IP-Adressen abhören.
Eine einfache Lösung ist der Zugriff auf die Befehlszeilenargumente über die Environment.GetCommandLineArgs Methode.
Sie müssen nur sicherstellen, dass Sie das erste Argument entfernen, nämlich den Namen der ausführbaren Datei:
%Vor%Tags und Links .net-core