2016-11-22 7 views
10

मेरे पास एएसपी.नेट कोर वेब एप्लिकेशन है। मैंने अपने वेब सर्वर पर वेब एप्लिकेशन कॉन्फ़िगर किया है और ASPNETCORE_ENVIRONMENT वैरिएबल को Development पर सेट किया है। मैंने इस चर को मशीन स्तर पर सेट किया है जैसा कि नीचे दी गई तस्वीर में दिखाया गया है। अब उसी मशीन पर मैं Staging पर्यावरण के समान वेब एप्लिकेशन का एक और उदाहरण कॉन्फ़िगर करना चाहता हूं।उसी मशीन पर mutilple ASPNETCORE_ENVIRONMENT को कॉन्फ़िगर कैसे करें?

मशीन स्तर के बजाय आवेदन स्तर पर ASPNETCORE_ENVIRONMENT सेट करने के लिए मेरे विकल्प क्या हैं? तो मैं एक ही मशीन पर एक ही आवेदन के कई उदाहरण होस्ट कर सकता हूं?

enter image description here

enter image description here

+0

आपकी परियोजना कैसे बनाई और तैनात की जाती है? शायद आप परियोजना निर्माण या तैनाती के दौरान अपने सिस्टम में सिस्टम पर्यावरण उपसर्ग पास करने पर विचार कर सकते हैं। इसलिए वे पर्यावरण मूल्य प्राप्त करने के लिए विभिन्न पर्यावरण परिवर्तनीय उपसर्ग का उपयोग कर सकते हैं। – Ricky

उत्तर

8

आप विकल्पों में से एक जोड़ी है।

  1. प्रत्येक ऐप को एक अलग उपयोगकर्ता के रूप में चलाएं, और उस उपयोगकर्ता प्रोफ़ाइल के भीतर पर्यावरण चर सेट करें। यह आपको एक अच्छा जोड़ा सुरक्षा बोनस देता है। उपयोगकर्ता प्रोफ़ाइल लोड करने के लिए आपको ऐप पूल सेट करना होगा।

  2. उपयोग IIS कॉन्फ़िगरेशन

    1. प्रारंभ आईआईएस प्रबंधक
    2. चुनें विन्यास संपादक अनुभाग बता गया के लिए नीचे खींचें और system.webServer/aspNetCore चुनें
    3. से बता गया के लिए नीचे खींचें और ApplicationHost.config चुनें
    4. पर्यावरण वैरिएबल तत्व पर क्लिक करें और दूसरे छेद में छिपाने वाले बटन पर क्लिक करें दाईं ओर, शरद ऋतु।
    5. अपने पर्यावरण चर सेट करें।
    6. पर्यावरण चर स्क्रीन से बाहर निकलें और फिर लागू करें पर क्लिक करें।
    7. ऐप पूल/ऐप को पुनरारंभ करें।
+1

समाधान # 1: 1.1 एक नया उपयोगकर्ता बनाएं, 1.2 लॉग इन करें और उपयोगकर्ता खातों पर जाएं - 1.3 "सेट एनवी चर" पर क्लिक करें, 1.4 अपने मुख्य उपयोगकर्ता पर वापस जाएं और आईआईएस पर जाएं, 1.5 पूल का चयन करें जिस वेबसाइट को आप बदलना चाहते हैं, 1.6 उपयोगकर्ता को सेट करें, 1.7 उन्नत विकल्पों में, "लोड उपयोगकर्ता प्रोफ़ाइल" सेट करें = सही – Jean

+2

मैंने समाधान 2 – LP13

1

आप कोड को पार्स विन्यास वेब सर्वर पर चल बदल सकते हैं? यही वह है जो मैं करने की सिफारिश करता हूं। इससे आपको विंडोज वातावरण में अपने पर्यावरण को अधिक स्वाभाविक रूप से कॉन्फ़िगर करने की अनुमति मिल जाएगी।

जबकि वैरिएबल को कॉन्फ़िगर करने का पारंपरिक तरीका ASPNETCORE_ENVIRONMENT पर्यावरण चर के माध्यम से है, तो आप बदल सकते हैं कि ASP.NET कोर इसकी कॉन्फ़िगरेशन को कैसे पार करता है जैसे कि आप चर कमांड तर्क के माध्यम से चर सेट कर सकते हैं।

बारीकियों में प्राप्त करने के लिए ...

डिफ़ॉल्ट रूप से, Program.cs फ़ाइल dotnet new -t web आदेश द्वारा उत्सर्जित तरह दिखता है निम्नलिखित:

public static void Main(string[] args) { 
    var host = new WebHostBuilder() 
     .UseKestrel() 
     .UseUrls("http://0.0.0.0:5000") 
     .UseContentRoot(Directory.GetCurrentDirectory()) 
     .UseIISIntegration() 
     .UseStartup<Startup>() 
     .Build(); 

    host.Run(); 
} 

यह ASP.NET कोर the default configuration processing (environment variables with a ASPNETCORE_ prefix) उपयोग यह निर्धारित करने में आता है IHostingEnvironment.EnvironmentName का मान, जिसका उपयोग आप कॉन्फ़िगर करने के लिए कर रहे हैं कि आपका एप्लिकेशन कैसा चल रहा है।

सौभाग्य से, आप एएसपी के तरीके को बदल सकते हैं।UseConfiguration() extension method on WebHostBuilder का उपयोग करके नेट कोर पार्स कॉन्फ़िगरेशन। यहाँ डिफ़ॉल्ट कार्यान्वयन के साथ कस्टम विन्यास का उपयोग करने का एक उदाहरण है:

public static void Main(string[] args) { 
     var configuration = 
      new ConfigurationBuilder() 
       .AddEnvironmentVariables("ASPNETCORE_") 
       .Build(); 

     var host = 
      new WebHostBuilder() 
       .UseConfiguration(configuration) 
       .UseKestrel() 
       .UseUrls("http://0.0.0.0:5000") 
       .UseContentRoot(Directory.GetCurrentDirectory()) 
       .UseIISIntegration() 
       .UseStartup<Startup>() 
       .Build(); 

     host.Run(); 
    } 

यहाँ से, मैं इसे बदल जाएगा तो यह ASPNETCORE_ उपसर्ग के वातावरण चर के अलावा कमांड लाइन का उपयोग कर सकते हैं। यह आप आसानी से ऐसा तरह, आप चाहते हैं जो कुछ भी पर्यावरण नाम के साथ अपने आवेदन को चलाने के लिए अनुमति देगा:

public static void Main(string[] args) { 
     var configuration = 
      new ConfigurationBuilder() 
       .AddEnvironmentVariables("ASPNETCORE_") 
       .AddCommandLine(args) 
       .Build(); 

     var host = 
      new WebHostBuilder() 
       .UseConfiguration(configuration) 
       .UseKestrel() 
       .UseUrls("http://0.0.0.0:5000") 
       .UseContentRoot(Directory.GetCurrentDirectory()) 
       .UseIISIntegration() 
       .UseStartup<Startup>() 
       .Build(); 

     host.Run(); 
    } 

फिर, जब आप dotnet run के साथ अपने डॉटनैट कोर आवेदन शुरू, आप पर्यावरण कमांड लाइन पर, इस तरह सेट कर सकते हैं :

dotnet run environment=development 
dotnet run environment=staging 

अब ASPNETCORE_ENVIRONMENT वातावरण चर अभी भी सम्मान किया जाना होगा, लेकिन आप कमांड लाइन के माध्यम से इसे ओवरराइड कर सकते हैं जब आप स्थानीय विकास कर रहे हैं। एक नोट के रूप में, आपको Microsoft.Extensions.Configuration.CommandLine nuget पैकेज को project.json फ़ाइल में शामिल करने की आवश्यकता होगी यदि आपने AddCommandLine() एक्सटेंशन विधि प्राप्त करने के लिए पहले से ऐसा नहीं किया है।

+0

का उपयोग किया है, मैं वास्तव में उत्पादन में कमांड का उपयोग करके अपना एप्लिकेशन नहीं चलाऊंगा। आवेदन आईआईएस के तहत चल रहा है। मैंने @blowdart 2 समाधान – LP13

+0

डॉटनेट रन का उपयोग आवश्यक नहीं है जो हर कोई एप्लिकेशन चलाने के लिए उपयोग कर रहा है। इसलिए, उदाहरण के लिए, आईआईएस पर होस्टिंग, या केवल केस्ट्रल के पीछे सीधे प्रक्रिया बनाने के दौरान, यह दृष्टिकोण टूट जाता है। – joey

संबंधित मुद्दे