2016-08-31 4 views
2

Ich habe gelesen Working with multiple environments und über die Startup Klasse.So konfigurieren Sie Startup-Klasse in Asp.Net Core

Wenn eine ASP.NET Core-Anwendung gestartet wird, wird die Startup-Klasse Bootstrap der Anwendung verwendet, die Konfigurationseinstellungen laden, usw. (mehr über ASP.NET Start erfahren). Wenn jedoch eine Klasse mit dem Namen Startup {EnvironmentName} (z. B. StartupDevelopment) vorhanden ist und die Umgebungsvariable ASPNETCORE_ENVIRONMENT mit diesem Namen übereinstimmt, wird stattdessen die Startup-Klasse verwendet. So könnten Sie Startup für die Entwicklung konfigurieren, aber eine separate StartupProduction, die wäre, wenn die App in Produktion ausgeführt wird. Oder umgekehrt.

So habe ich drei Startklassen StartupDevelopment, StartupStaging und StartupProduction und meine Program.cs ist so konfiguriert, wie unten

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseIISIntegration() 
      .UseStartup<StartupDevelopment>() 
      .Build(); 

     host.Run(); 
    } 
} 

Beachten Sie, dass .UseStartup<StartupDevelopment>() für StartupDevelopment konfiguriert ist.

Jetzt in Staging und Production würde ich ASPNETCORE_ENVIRONMENT entsprechend setzen. Aber wie Asp.Net-Kern würde StartupStaging oder StartupProduction seit seiner hardcoded zu StartupDevelopment verwenden?

+0

Funktioniert dieses 'Startup {ENVIRONMENT} .cs' Muster noch? Sie haben es aus ihrem Github-Repository entfernt ... https://github.com/aspnet/Docs/commit/8c8771f2b765d5a665a2d3639d60888876e3fda4#diff-1b381ac5136edcd1392a3cce02697697 – Technetium

+0

Anscheinend tut es das! Ich konnte nirgends ein Beispiel dafür finden. Ich lese den Quellcode durch, um meine Antwort zu finden. – Technetium

+0

Ich würde private 'ConfigureDevelopment',' ConfigureStaging' und 'ConfigureProduction' Methoden erstellen und diese in der' Configure' Methode verwenden. –

Antwort

3

Es gibt an IWebHostBuilder.UseStartup(string assemblyName) extension method, die Sie verwenden können, um die richtige Startup{ASPNETCORE_ENVIRONMENT} Klasse zu laden. Sobald das definiert ist, versucht here is the algorithm, die richtige Klasse zu finden.

Wenn Sie den Namen der Assembly nicht hart codieren möchten, können Sie es programmatisch wie so holen kann:

using System.Reflection; // Add this so you can use .GetTypeInfo() 

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseIISIntegration() 
      .UseStartup(typeof(StartupDevelopment).GetTypeInfo().Assembly.GetName().Name) 
      .Build(); 

     host.Run(); 
    } 
} 

Damit Sie diese Konvention verwenden, alle Ihre Startup* Klassen müssen in der sein gleiche Versammlung.

2

Ich habe es funktioniert nur durch Montage

public static void Main(string[] args) 
{ 
    var host = new WebHostBuilder() 
     .UseKestrel() 
     .UseContentRoot(Directory.GetCurrentDirectory()) 
     .UseIISIntegration() 
     .UseStartup("MyAssemblyName") 
     .Build(); 

    host.Run(); 
} 
-1

nennen vorbei Sie haben Startup in einer separaten Assembly Unter der Annahme, dass Main, haben Sie statisch die Montage in Ihrem Hauptprojekt referenziert?

+0

Dies bietet keine Antwort auf die Frage. Sie können [ähnliche Fragen suchen] (// stackoverflow.com/search) oder auf die verwandten und verknüpften Fragen auf der rechten Seite der Seite verweisen, um eine Antwort zu finden. Wenn Sie eine verwandte, aber andere Frage haben, [stellen Sie eine neue Frage] (// stackoverflow.com/questions/ask), und fügen Sie einen Link zu diesem ein, um den Kontext zu verdeutlichen. Siehe: [Fragen stellen, Antworten erhalten, keine Ablenkungen] (// stackoverflow.com/tour) –

Verwandte Themen