खोज…


प्रति पर्यावरण एप्लेटिंग होना

प्रत्येक वातावरण के लिए आपको एक अलग एप्लेटिंग बनाना होगा। {EnvironmentName} .json फाइलें:

  • appsettings.Development.json
  • appsettings.Staging.json
  • appsettings.Production.json

फिर Project.json फ़ाइल खोलें और उन्हें "publishOptions" अनुभाग में "शामिल करें" में शामिल करें। यह उन सभी फ़ाइलों और फ़ोल्डरों को सूचीबद्ध करता है, जिन्हें आप प्रकाशित करते समय शामिल करेंगे:

"publishOptions": {
  "include": [
    "appsettings.Development.json",
    "appsettings.Staging.json",
    "appsettings.Production.json"
    ... 
  ]
}

अंतिम चरण। अपने स्टार्टअप क्लास ऐड में:

.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

कंस्ट्रक्टर में जहाँ आप कॉन्फ़िगरेशन स्रोत सेट करते हैं:

var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();

कोड से पर्यावरण का नाम / जाँच प्राप्त करें

आपको केवल IHostingEnvironment के प्रकार का एक चर IHostingEnvironment :

  • पर्यावरण नाम प्राप्त करें:

      env.EnvironmentName
    
  • पूर्वनिर्धारित Development , Staging , Production वातावरण के लिए सबसे अच्छा तरीका है HostingEnvironmentExtensions वर्ग से विस्तार विधियों का उपयोग करना

      env.IsDevelopment()
      env.IsStaging()
      env.IsProduction()
    
  • सही ढंग से अनदेखा करने का मामला ( HostingEnvironmentExtensions से एक और एक्सटेंशन विधि:

     env.IsEnvironment("environmentname") 
    
  • मामला संवेदनशील संस्करण:

     env.EnvironmentName == "Development" 
    

कई वातावरण कॉन्फ़िगर करना

यह उदाहरण दिखाता है कि अलग-अलग निर्भरता इंजेक्शन कॉन्फ़िगरेशन के साथ कई वातावरणों को कैसे कॉन्फ़िगर किया जाए और एक Startup क्लास में अलग-अलग मिडलवेर्स को।

public void Configure(IApplicationBuilder app) और public void ConfigureServices(IServiceCollection services) विधियों के साथ-साथ कोई भी Configure{EnvironmentName} कर सकता है Configure{EnvironmentName} और Configure{EnvironmentName}Services का उपयोग पर्यावरण पर निर्भर कॉन्फ़िगरेशन के लिए होता है।

इस पैटर्न का उपयोग करने से बचा जाता है if/else एक एकल विधि / Startup क्लास के साथ तर्क को छोड़ दिया जाए और इसे साफ और अलग रखा जाए।

public class Startup
{
    public void ConfigureServices(IServiceCollection services) { }
    public void ConfigureStaggingServices(IServiceCollection services) { }
    public void ConfigureProductionServices(IServiceCollection services) { }
    
    public void Configure(IApplicationBuilder app) { }
    public void ConfigureStagging(IApplicationBuilder app) { }
    public void ConfigureProduction(IApplicationBuilder app) { }
}

जब एक Configure{Environmentname} या Configure{Environmentname}Services नहीं मिल रहा है, तो यह क्रमशः Configure या ConfigureServices Configure{Environmentname}Services में वापस आ जाएगा।

Startup क्लास में भी यही शब्दार्थ लागू होता है। StartupProduction का उपयोग तब किया जाएगा जब ASPNETCORE_ENVIRONMENT वैरिएबल को Production सेट किया जाता है और Stagging या Development होने पर Startup वापस गिर जाएगा

एक पूर्ण उदाहरण:

public class Startup
{
    public Startup(IHostingEnvironment hostEnv)
    {
        // Set up configuration sources.
        var builder = new ConfigurationBuilder()
            .SetBasePath(hostEnv.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{hostEnv.EnvironmentName}.json", optional: true, reloadOnChange: true);

        if (hostEnv.IsDevelopment())
        {
            // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
            builder.AddApplicationInsightsSettings(developerMode: true);
        }

        builder.AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; set; }

    // This method gets called by the runtime. Use this method to add services to the container
    public static void RegisterCommonServices(IServiceCollection services) 
    {
        services.AddScoped<ICommonService, CommonService>();
        services.AddScoped<ICommonRepository, CommonRepository>();
    }
    
    public void ConfigureServices(IServiceCollection services)
    {
        RegisterCommonServices(services);
        
        services.AddOptions();
        services.AddMvc();
    }

    public void ConfigureDevelopment(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        app.UseBrowserLink();
        app.UseDeveloperExceptionPage();

        app.UseApplicationInsightsRequestTelemetry();
        app.UseApplicationInsightsExceptionTelemetry();
        app.UseStaticFiles();
        app.UseMvc();
    }

    // No console Logger and debugging tools in this configuration
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddDebug();

        app.UseApplicationInsightsRequestTelemetry();
        app.UseApplicationInsightsExceptionTelemetry();
        app.UseStaticFiles();
        app.UseMvc();
    }
}

देखने में पर्यावरण विशिष्ट सामग्री

आपको कुछ सामग्री को देखने की आवश्यकता हो सकती है, जो केवल कुछ वातावरण के लिए विशिष्ट है। इस लक्ष्य को प्राप्त करने के लिए आप पर्यावरण टैग सहायक का उपयोग कर सकते हैं:

<environment names="Development">
    <h1>This is heading for development environment</h1>
</environment>
<environment names="Staging,Production">
    <h1>This is heading for Staging or production environment</h1>
</environment>

पर्यावरण टैग सहायक केवल अपनी सामग्री को प्रस्तुत करेगा यदि वर्तमान परिवेश names विशेषताओं का उपयोग करके निर्दिष्ट वातावरण में से एक से मेल खाता है।

कमांड लाइन से पर्यावरण चर सेट करें

पर्यावरण को Development लिए निर्धारित करना

SET ASPNETCORE_ENVIRONMENT=Development

अब Asp.Net Core एप्लिकेशन चलाने से परिभाषित वातावरण में होगा।

ध्यान दें

  1. समानता चिन्ह = से पहले और बाद में कोई स्थान नहीं होना चाहिए।
  2. एप्लिकेशन चलाने से पहले कमांड प्रॉम्प्ट को बंद नहीं किया जाना चाहिए क्योंकि सेटिंग्स कायम नहीं हैं।

PowerShell से पर्यावरण चर सेट करें

PowerShell का उपयोग करते समय, आप पर्यावरण चर को स्थायी रूप से सेट करने के लिए setx.exe का उपयोग कर सकते हैं।

  1. PowerShell प्रारंभ करें

  2. निम्न में से एक टाइप करें:

    setx ASPNETCORE_ENVIRONMENT "विकास"

    सेटेक्स ASPNETCORE_ENVIRONMENT "स्टेजिंग"

  3. PowerShell को पुनरारंभ करें

Web.config से ASPNETCORE_ENVIRONMENT का उपयोग करना

अगर आप पर्यावरण चर से ASPNETCORE_ENVIRONMENT का उपयोग नहीं करना चाहते हैं और इसे अपने आवेदन के web.config से उपयोग करना चाहते हैं तो web.config को इस तरह संशोधित करें-

<aspNetCore processPath=".\WebApplication.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
  </environmentVariables>
</aspNetCore>


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow