.NET core Übergeben Sie Commandline Args an Startup.cs von Program.cs

8

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?

    
James Hancock 22.12.2016, 19:40
quelle

3 Antworten

5

AKTUALISIEREN

Ich habe tatsächlich gefunden, was elegantere Lösung scheint:

  1. Parsen Sie Befehlszeilenargumente in IConfigurationRoot im Programm (verwenden Sie CommandLineApplication, gute Artikel und Beispiele hier )
  2. Übergeben Sie einfach dieses 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):

%Vor%

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:

  • Dadurch sollte das Startup 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.
  • Aus irgendeinem Grund müssen Sie den Parameter applicationName manuell wie in meinem Beispiel angeben. Ich teste das auf 2.0.0-preview1-final
Algirdas 31.05.2017, 06:14
quelle
5

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:

%Vor%

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:

%Vor%

In diesem Beispiel wird Ihre Anwendung Port 8080 auf allen verfügbaren IP-Adressen abhören.

    
Daniel Grim 04.01.2017 20:52
quelle
3

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%     
Samir Aguiar 11.08.2017 14:07
quelle

Tags und Links