पर्यावरण चर को स्थापित करते हुए, IIS में प्रकाशित करें


134

इन दो प्रश्नों / उत्तरों को पढ़कर मैं IIS 8.5 सर्वर पर Asp.net 5 ऐप चला पा रहा था।

Asp.net vNext विंडोज़ सर्वर में IIS के शुरुआती बीटा प्रकाशित होते हैं

IIS पर काम करने के लिए MVC6 ऐप को कैसे कॉन्फ़िगर करें?

समस्या यह है कि IIS पर चलने पर भी वेब ऐप अभी भी env.EnvironmentNameमूल्य के साथ उपयोग कर रहा है Development

इसके अलावा, मैं एक ही सर्वर पर एक ही वेब (स्टेजिंग, प्रोडक्शन) के दो संस्करण चलाना चाहता हूं, इसलिए मुझे प्रत्येक वेब के लिए चर को अलग से सेट करने के लिए एक विधि की आवश्यकता है।

यह कैसे करना है?


4
आम तौर पर तीन नेटवर्क वातावरण होते हैं डेवलपमेंट, स्टेजिंग और प्रोडक्शन। वेब सर्वर एक वातावरण में है। इस प्रकार सर्वर के लिए सिस्टम पर्यावरण चर की स्थापना आम तौर पर वास्तविक प्रतिबंध नहीं है। एक अभी भी दृश्य स्टूडियो में डिबगिंग के लिए एक और वातावरण Properties\launchSettings.jsonका अनुकरण करने के लिए उपयोग कर सकते हैं ।
ओलेग

जवाबों:


286

यह उत्तर मूल रूप से ASP.NET Core RC1 के लिए लिखा गया था। RC2 ASP.NET Core में जेनेरिक httpPlafrom हैंडलर से लेकर एस्पनेटकोर स्पेसिफिक एक तक ले जाया गया। ध्यान दें कि चरण 3 ASP.NET कोर के किस संस्करण पर निर्भर करता है जिसका आप उपयोग कर रहे हैं।

ASP.NET के लिए पर्यावरण चर को चालू करता है। कोर परियोजनाओं को उपयोगकर्ता के लिए पर्यावरण चर निर्धारित किए बिना या कई कमांड प्रविष्टियां बनाने के लिए सेट किया जा सकता है।

  1. IIS में अपने आवेदन पर जाएं और चुनें Configuration Editor
  2. चुनते हैं Configuration Editor
  3. चुनें system.webServer/aspNetCore(RC2 और RTM) या system.webServer/httpPlatformमें (RC1) Sectionबता गया
  4. कॉम्बोक्स Applicationhost.config ...में चुनें From
  5. enviromentVariablesतत्व पर राइट क्लिक करें 'environmentVariables' element, फिर चुनें Edit Itemsयहाँ छवि विवरण दर्ज करें
  6. अपने पर्यावरण चर सेट करें।
  7. विंडो बंद करें और अप्लाई पर क्लिक करें।
  8. किया हुआ

इस तरह आपको अपने पूल के लिए विशेष उपयोगकर्ता बनाने या अतिरिक्त कमांड प्रविष्टियाँ बनाने की आवश्यकता नहीं है project.json। इसके अलावा, प्रत्येक वातावरण के लिए विशेष कमांड जोड़ने से "बिल्ड एक बार, कई बार परिनियोजित होता है" जैसा कि आपको dnu publishप्रत्येक पर्यावरण के लिए अलग से कॉल करना होगा , एक बार प्रकाशित करने और परिणामी विरूपण साक्ष्य को तैनात करने के बजाय कई बार।

आरसी 2 और आरटीएम के लिए अपडेट किया गया, मार्क जी और ट्रेडर के लिए धन्यवाद।


12
चरण 3 के लिए मैंने system.webServer/aspNetCoreइसके बजाय उपयोग किया।
मार्क जी

1
सिस्टम वातावरण चर शुरुआत में प्रक्रियाओं द्वारा विरासत में मिला है। इसलिए यदि आप अपने एप्लिकेशन को चलाने के दौरान कुछ env वैरिएबल बदलते हैं तो आप डिफ़ॉल्ट रूप से इस परिवर्तन को नहीं देख पाएंगे। प्रभावी होने के लिए सिस्टम एनवी वेरिएशन के लिए आपको कम से कम साइट, शायद पूल, या यहां तक ​​कि IIS सेवा को पुनरारंभ करने की आवश्यकता होगी, यह इस बात पर निर्भर करता है कि IIS कैसे प्रक्रिया करता है। इसे परखने की जरूरत है।
NickAb

7
कॉन्फ़िगरेशन संपादक के माध्यम से जोड़ी गई सेटिंग्स अगली तैनाती पर मिटा दी जाएंगी?
ब्रैड गार्डनर

11
@ ब्रैड-माली अगर बदलाव web.config के बजाय Applicationhost.config में किए जाते हैं, तो बदलाव तैनाती के बीच बने रहेंगे।
निकब

15
Asp.Net Core 2.0 के लिए काम करता है
फ्रैंक तोप

34

Web.config को <aspNetCore> के तहत एक <environmentVariables> अनुभाग के साथ अपडेट करें

<configuration>
  <system.webServer>
    <aspNetCore .....>
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>

या जब web.config अधिलेखन इस सेटिंग को रखने के लिए, के समान परिवर्तन करने applicationHost.config साइट स्थान को निर्दिष्ट करने के रूप में @NickAb पता चलता है।

<location path="staging.site.com">
    <system.webServer>
        <aspNetCore>
            <environmentVariables>
                <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
            </environmentVariables>
        </aspNetCore>
    </system.webServer>
</location>
<location path="production.site.com">
    <system.webServer>
        <aspNetCore>
            <environmentVariables>
                <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
            </environmentVariables>
        </aspNetCore>
    </system.webServer>
</location>

2
यह एक तरह से अलग है कि आपका web.config प्रोजेक्ट का एक हिस्सा है और VCS में संस्करणित है। यदि आपके पास कई वातावरण हैं, जैसे ठेस, स्टेजिंग, देव, तो आपको हर एक के लिए web.config को बदलने के लिए किसी तरह की आवश्यकता होगी। IIS में ApplicationHost.config को बदलना केवल इस IIS को प्रभावित करता है। ताकि आप अपने VCS में एकल web.config और IIS के लिए पर्यावरण चर जो web.config चर को ओवरराइड कर सकें। ApplicationHost.config को PowerShell iis.net/learn/manage/powershell/…
NickAb

धन्यवाद @NickAb, जो हर तैनाती web.config को अपडेट करने से बचता है। मैंने अपना उत्तर अपडेट कर दिया है।
ट्रेवर डेनियल

मुझे शक्तियां प्राप्त करने में परेशानी हो रही है मैं Target configuration object '/system.webServer/aspNetCore/environmentVariables/environmentVariable is not found ... सामान्य रूप से कुछ वैरिएबल सेट करने के लिए मिलता रहता हूं मैं कुछ इस तरह लिखूंगा: Set-WebConfigurationProperty -PSPath IIS:\ -location example.com -filter /system.webServer/aspNetCore/environmentVariables/environmentVariable -name ASPNETCORE_ENVIRONMENT -value Staging क्या मैं याद कर रहा हूं?
क्रिश्चियन

मुझे वही पता चला जो मैं जानता था और उसके appcmdबदले इस्तेमाल करता था ।
क्रिश्चियन

@ क्रिसियन, इस उत्तर की जाँच करें: stackoverflow.com/a/50869935/33533 पर्यावरण चर नाम और मान एक हैश तालिका में चलते हैं, इसलिए आपके उदाहरण से यह होगाSet-WebConfigurationProperty -PSPath IIS:\ -Location example.com -Filter /system.webServer/aspNetCore/environmentVariables -Name . -Value @{ Name = 'ASPNETCORE_ENVIRONMENT'; Value = 'Staging' }
कर्टिस खरीदता है

21

संपादित करें: RC2 और RTM रिलीज़ के रूप में, यह सलाह पुरानी है। रिलीज के समय इसे पूरा करने का सबसे अच्छा तरीका है कि प्रत्येक पर्यावरण के लिए IIS में निम्नलिखित web.config अनुभागों को संपादित किया जाए:

system.webServer/aspNetCore:

पर्यावरणीय प्रवेश को संपादित करें और एक पर्यावरण चर सेटिंग जोड़ें:

ASPNETCORE_ENVIRONMENT : < Your environment name >


Drpdrp के दृष्टिकोण के विकल्प के रूप में, आप निम्न कार्य कर सकते हैं:

  • अपने प्रोजेक्ट.जसन में, ASPNET_ENV चर को सीधे Kestrel में पास करने वाली कमांड जोड़ें:

    "commands": {
        "Development": "Microsoft.AspNet.Server.Kestrel --ASPNET_ENV Development",
        "Staging": "Microsoft.AspNet.Server.Kestrel --ASPNET_ENV Staging",
        "Production": "Microsoft.AspNet.Server.Kestrel --ASPNET_ENV Production"
    }
    
  • प्रकाशित करते समय, --iis-commandपर्यावरण को निर्दिष्ट करने के लिए विकल्प का उपयोग करें:

    dnu publish --configuration Debug --iis-command Staging --out "outputdir" --runtime dnx-clr-win-x86-1.0.0-rc1-update1
    

मुझे यह दृष्टिकोण अतिरिक्त IIS उपयोगकर्ता बनाने की तुलना में कम दखल देने वाला लगा।


11
यदि आप दृश्य स्टूडियो के msdeploy के माध्यम से प्रकाशित कर रहे हैं। फिर आप अपनी .pubxml फ़ाइल में <IISCommand> स्टेजिंग </ IISCommand> डाल सकते हैं और यह निर्दिष्ट IIS कमांड का उपयोग करते हुए तैनात करेगा, भले ही आप इसे प्रकाशित UI में निर्दिष्ट न करें।
डीन नॉर्थ

@ डीन नॉर्थ - यह सुनहरा है !! एक चैंपियन की तरह काम करता है! साझा करने के लिए धन्यवाद!
एस। रासमुसेन

17

आईआईएस वेब सर्वर पर होस्ट किए गए मेरे वेब एप्लिकेशन (प्रोडक्शन, स्टैगिंग, टेस्ट) हैं। इसलिए ASPNETCORE_ENVIRONMENT ऑपरेटिव सिस्टम एनवायरमेंट वेरिएबल पर भरोसा करना संभव नहीं था, क्योंकि इसे एक विशिष्ट मूल्य पर सेट करना (उदाहरण के लिए STAGING) का दूसरों के अनुप्रयोगों पर प्रभाव पड़ता है।

काम के इर्द-गिर्द, मैंने अपने विज़ुअलस्टडियो समाधान के भीतर एक कस्टम फ़ाइल (envsettings.json) को परिभाषित किया:

यहाँ छवि विवरण दर्ज करें

निम्नलिखित सामग्री के साथ:

{
  // Possible string values reported below. When empty it use ENV variable value or Visual Studio setting.
  // - Production
  // - Staging
  // - Test
  // - Development
  "ASPNETCORE_ENVIRONMENT": ""
}

फिर, मेरे आवेदन के प्रकार (उत्पादन, मंचन या परीक्षण) के आधार पर मैंने इस फ़ाइल को निर्धारित रूप से सेट किया: मान लें कि मैं TEST अनुप्रयोग को लागू कर रहा हूं, मेरे पास होगा:

"ASPNETCORE_ENVIRONMENT": "Test"

उसके बाद, Program.cs फ़ाइल में केवल इस मान को पुनः प्राप्त करें और फिर webHostBuilder का वातावरण सेट करें:

    public class Program
    {
        public static void Main(string[] args)
        {
            var currentDirectoryPath = Directory.GetCurrentDirectory();
            var envSettingsPath = Path.Combine(currentDirectoryPath, "envsettings.json");
            var envSettings = JObject.Parse(File.ReadAllText(envSettingsPath));
            var enviromentValue = envSettings["ASPNETCORE_ENVIRONMENT"].ToString();

            var webHostBuilder = new WebHostBuilder()
                .UseKestrel()
                .CaptureStartupErrors(true)
                .UseSetting("detailedErrors", "true")
                .UseContentRoot(currentDirectoryPath)
                .UseIISIntegration()
                .UseStartup<Startup>();

            // If none is set it use Operative System hosting enviroment
            if (!string.IsNullOrWhiteSpace(enviromentValue)) 
            { 
                webHostBuilder.UseEnvironment(enviromentValue);
            }

            var host = webHostBuilder.Build();

            host.Run();
        }
    }

प्रकाशनों में envsettings.json को शामिल करना याद रखें (project.json):

  "publishOptions":
  {
    "include":
    [
      "wwwroot",
      "Views",
      "Areas/**/Views",
      "envsettings.json",
      "appsettings.json",
      "appsettings*.json",
      "web.config"
    ]
  },

यह समाधान मुझे स्वतंत्र रूप से एक ही IIS पर होस्ट किया गया ASP.NET कोर एप्लिकेशन को स्वतंत्र रूप से परिवर्तनीय चर मान से मुक्त करने के लिए बनाता है।


बहुत अच्छा, एकमात्र परिवर्तन जो मैं सुझाता हूं वह है स्वैप var currentDirectoryPath = Directory.GetCurrentDirectory (); var currentDirectoryPath = PlatformServices.Default.Application.ApplicationBasePath के लिए; यह वर्तमान dir पाने के लिए बहुत सुरक्षित तरीका है।
पीटर कोट्स

7
जब आप किसी ढांचे के विन्यास का प्रबंधन करने के लिए विन्यास की एक और परत तैयार करना चाहते हैं, तो बॉक्स अनुभव से क्या बढ़िया है
कुगेल

16

व्यापक गुगली के बाद मुझे एक काम करने वाला समाधान मिला, जिसमें दो चरण होते हैं।

पहला कदम सिस्टम वाइड वातावरण चर ASPNET_ENV को Windows सर्वर पर उत्पादन और पुनः आरंभ करने के लिए सेट करना है । इसके बाद, सभी वेब ऐप्स को पर्यावरण नाम के रूप में 'प्रोडक्शन' का मूल्य मिल रहा है।

दूसरा चरण (वेब ​​का मंचन करने के लिए मूल्य 'मंचन को सक्षम करने के लिए) सही ढंग से काम करना अधिक कठिन था, लेकिन यहां यह है:

  1. नई विंडोज़ उपयोगकर्ता बनाएँ, उदाहरण के लिए सर्वर पर StagingPool
  2. इस उपयोगकर्ता के लिए, मान 'स्टेजिंग' के साथ नया उपयोगकर्ता चर ASPNETCORE_ENVIRONMENT बनाएं (आप इसे इस उपयोगकर्ता के रूप में या regedit के माध्यम से लॉग इन करके कर सकते हैं)
  3. IIS प्रबंधक में व्यवस्थापक के रूप में वापस, एप्लिकेशन पूल खोजें जिसके तहत स्टेजिंग वेब चल रहा है और उन्नत सेटिंग्स में उपयोगकर्ता को स्टेजिंगपूल की पहचान सेट करें ।
  4. लोड उपयोगकर्ता प्रोफ़ाइल को भी सही पर सेट करें , ताकि पर्यावरण चर लोड हो जाएं। <- बहुत महत्वपूर्ण!
  5. सुनिश्चित करें कि स्टैगिंगपूल के पास वेब फ़ोल्डर तक पहुंच अधिकार है और एप्लिकेशन पूल को रोकें और शुरू करें।

अब स्टेजिंग वेब में 'स्टेजिंग' के लिए एनवायरनमेंट सेट होना चाहिए।

अद्यतन: विंडोज 7+ में एक कमांड है जो सीएमडी प्रॉम्प्ट से पर्यावरण चर भी निर्दिष्ट उपयोगकर्ता के लिए सेट कर सकता है। यह आउटपुट मदद करता है प्लस नमूने:

>setx /?

1
ऐसा प्रतीत होता है कि ASP.NET 5 RC1 में, पर्यावरण चर को होस्टिंग: पर्यावरण में बदल दिया गया था।
ग्रैडी वर्नर

जब हम एज़्योर वेब ऐप पर इसे पोस्ट करते हैं, तो हम "लोड यूजर प्रोफाइल लोड" कैसे करते हैं?
पुनीत घनशानी

@PunitGanshani के रूप में मैं समझता हूँ, एक "आवेदन सेटिंग्स" जहां पर्यावरण कुंजी / मान जोड़े सेट कर सकते हैं वेब ऐप्लिकेशन के लिए नीला पोर्टल में अनुभाग है: azure.microsoft.com/en-us/documentation/articles/...
drpdrp

RC2 के लिए @GradyWerner वे इसे बदल रहे हैं (अब के रूप में) ASPNET_ENVIRONISER ;-)
b.pell

1
@ b.pell ऐसा प्रतीत होता है कि यह अब ASPNETCORE_ENVIRONMENT है :)
G G

11

आप वैकल्पिक ASPNETCORE_ENVIRONMENTरूप से डॉटनेट प्रकाशित कमांड में वांछित तर्क के रूप में पास कर सकते हैं:

/p:EnvironmentName=Staging

उदाहरण के लिए:

dotnet publish /p:Configuration=Release /p:EnvironmentName=Staging

यह आपके प्रोजेक्ट के लिए निर्दिष्ट सही वातावरण के साथ web.config उत्पन्न करेगा:

<environmentVariables>
  <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
</environmentVariables>

9

ऊपर वर्णित विकल्पों के अलावा, अन्य समाधानों के एक जोड़े हैं जो स्वचालित तैनाती के साथ अच्छी तरह से काम करते हैं या कम कॉन्फ़िगरेशन परिवर्तन की आवश्यकता होती है।

1. प्रोजेक्ट फ़ाइल (.CSProj) फ़ाइल को संशोधित करना

MSBuild उस EnvironmentNameप्रॉपर्टी का समर्थन करता है, जो आपके द्वारा परिनियोजित किए जाने वाले वातावरण के अनुसार सही वातावरण चर सेट करने में मदद कर सकती है। प्रकाशित चरण के दौरान पर्यावरण का नाम web.config में जोड़ा जाएगा।

बस प्रोजेक्ट फ़ाइल खोलें (* .csProj) और निम्न XML जोड़ें।

<!-- Custom Property Group added to add the Environment name during publish
  The EnvironmentName property is used during the publish for the Environment variable in web.config
  -->
  <PropertyGroup Condition=" '$(Configuration)' == '' Or '$(Configuration)' == 'Debug'">
    <EnvironmentName>Development</EnvironmentName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' != '' AND '$(Configuration)' != 'Debug' ">
    <EnvironmentName>Production</EnvironmentName>
  </PropertyGroup>

उपरोक्त कोड Developmentडिबग कॉन्फ़िगरेशन के लिए या यदि कोई कॉन्फ़िगरेशन निर्दिष्ट नहीं है, तो पर्यावरण का नाम जोड़ देगा । किसी भी अन्य कॉन्फ़िगरेशन के लिए पर्यावरण का नाम Productionउत्पन्न web.config फ़ाइल में होगा। अधिक जानकारी यहाँ

2. प्रकाशित प्रोफाइल में एन्वायरमेंटलनाम प्रॉपर्टी को जोड़ना।

हम <EnvironmentName>संपत्ति को प्रकाशित प्रोफ़ाइल में भी जोड़ सकते हैं । प्रकाशित प्रोफ़ाइल फ़ाइल खोलें, जो Properties/PublishProfiles/{profilename.pubxml}इस पर स्थित है जब प्रोजेक्ट प्रकाशित होने पर web.config में पर्यावरण नाम सेट होगा। अधिक विवरण यहाँ

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

3. डॉटनेट प्रकाशित का उपयोग करके कमांड लाइन विकल्प

अतिरिक्त, हम EnvironmentNameकमांड के विकल्प के रूप में संपत्ति को पास कर सकते हैं dotnet publish। निम्न आदेश Developmentमें web.config फ़ाइल की तरह पर्यावरण चर शामिल होगा ।

dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development


7

@ Tredder के उत्तर पर विस्तार करने के लिए आप पर्यावरणविरैबल्स का उपयोग करके परिवर्तन कर सकते हैं appcmd

मचान

%windir%\system32\inetsrv\appcmd set config "staging.example.com" /section:system.webServer/aspNetCore /+environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Staging'] /commit:APPHOST

उत्पादन

%windir%\system32\inetsrv\appcmd set config "example.com" /section:system.webServer/aspNetCore /+environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Production'] /commit:APPHOST


यहाँ कैसे एक स्थापित सर्वर पर Powershell के साथ IIS स्थापित किए बिना एक ही चीज़ को पूरा करने का तरीका है। gist.github.com/markarnott/c4aec1fc544fe89e2bd21f3f00d78933
मार्क

"Staging.example.com" या "example.com" निर्दिष्ट करना केवल उन विशिष्ट वेबसाइटों पर परिवर्तनशील लागू होगा। ओमिटिंग जो सर्वर पर सभी वेबसाइटों के लिए एक वैश्विक चर बनाएगा।
डेडलीडॉग

6

आपको एक जगह पर क्या पता होना चाहिए:

  • पर्यावरण चर के लिए किसी भी विन्यास सेटिंग्स को ओवरराइड करने के लिए, उन्हें पहले से उपसर्ग करना चाहिए ASPNETCORE_
  • यदि आप अपने JSON कॉन्फिगर में चाइल्ड नोड्स का मिलान करना चाहते हैं, तो :एक सेपरेटर के रूप में उपयोग करें । यदि प्लेटफ़ॉर्म वातावरण चर कुंजियों में कॉलन की अनुमति नहीं देता है, तो __इसके बजाय उपयोग करें ।
  • आप अपनी सेटिंग्स को समाप्त करना चाहते हैं ApplicationHost.config। IIS कॉन्फ़िगरेशन संपादक का उपयोग करने से आपके इनपुट को एप्लिकेशन को लिखा जाना Web.configहोगा - और अगली तैनाती के साथ ओवरराइट हो जाएगा!
  • संशोधन के लिए ApplicationHost.config, आप appcmd.exeयह सुनिश्चित करने के लिए उपयोग करना चाहते हैं कि आपके संशोधन सुसंगत हैं। उदाहरण:%systemroot%\system32\inetsrv\appcmd.exe set config "Default Web Site/MyVirtualDir" -section:system.webServer/aspNetCore /+"environmentVariables.[name='ASPNETCORE_AWS:Region',value='eu-central-1']" /commit:site

  • ऐसे अक्षर जो URL-सुरक्षित नहीं हैं, उन्हें यूनिकोड के रूप में %u007bछोड़ दिया जा सकता है, जैसे कि बाएं घुंघराले ब्रैकेट के लिए।

  • अपनी वर्तमान सेटिंग्स की सूची बनाने के लिए (Web.config से मूल्यों के साथ संयुक्त): %systemroot%\system32\inetsrv\appcmd.exe list config "Default Web Site/MyVirtualDir" -section:system.webServer/aspNetCore
  • यदि आप एक ही कुंजी के लिए कई बार कॉन्फ़िगरेशन कुंजी सेट करने के लिए कमांड चलाते हैं, तो इसे कई बार जोड़ा जाएगा! किसी मौजूदा मान को निकालने के लिए, जैसे कुछ का उपयोग करें %systemroot%\system32\inetsrv\appcmd.exe set config "Default Web Site/MyVirtualDir" -section:system.webServer/aspNetCore /-"environmentVariables.[name='ASPNETCORE_MyKey',value='value-to-be-removed']" /commit:site

1
ध्यान दें कि /commit:siteपरिवर्तन के साथ web.config में लिखे गए हैं, उन्हें बचाने के लिए ApplicationHost.configएक का उपयोग करना चाहिए/commit:apphost
एंजेल योरानोव

-section:system.webServer/aspNetCore /-"environmentVariables.(पर्यावरण चर को हटाने के लिए माइनस के साथ) एज़्योर रिलीज़ पाइपलाइन के दौरान निष्पादित होने में विफल रहता है। त्रुटि है hresult:80070032, message:Command execution failed। हालांकि clear config "Default Web Site/$(webSiteName)" -section:system.webServer/aspNetCore /commit:siteठीक काम करता है। यह वेब साइट के लिए पूरे aspNetCore अनुभाग को साफ़ करता है, लेकिन यह कोई समस्या नहीं है क्योंकि यह रिलीज़ के दौरान पैरामीट्रिक है।
oleksa

6

अन्य उत्तरों के समान, मैं अपने ASP.NET Core 2.1 पर्यावरण की स्थापना को सुनिश्चित करना चाहता था, जो केवल तैनाती पर ही कायम थे, लेकिन केवल विशिष्ट साइट पर ही लागू होते थे।

Microsoft के दस्तावेज़ के अनुसार, IIS 10 में निम्न PowerShell कमांड का उपयोग करके ऐप पूल पर पर्यावरण चर को सेट करना संभव है:

$appPoolName = "AppPool"
$envName = "Development"
cd "$env:SystemRoot\system32\inetsrv"
.\appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='$appPoolName'].environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='$envName']" /commit:apphost

मुझे दुर्भाग्य से अभी भी IIS 8.5 का उपयोग करना है और मुझे लगा कि मैं भाग्य से बाहर हूं। हालाँकि, ASPNETCORE_ENVIRONMENT के लिए साइट-विशिष्ट वातावरण चर मान सेट करने के लिए एक साधारण PowerShell स्क्रिप्ट चलाना अभी भी संभव है:

Import-Module -Name WebAdministration
$siteName = "Site"
$envName = "Development"
Set-WebConfigurationProperty -PSPath IIS:\ -Location $siteName -Filter /system.webServer/aspNetCore/environmentVariables -Name . -Value @{ Name = 'ASPNETCORE_ENVIRONMENT'; Value = $envName }

5

एडिटिंग एप्लीकेशनहॉस्ट.कॉनफिग के साथ @ ट्रेडर समाधान वह है जो काम करता है यदि आपके पास IIS पर वर्चुअल निर्देशिकाओं के भीतर स्थित कई अलग-अलग एप्लिकेशन हैं।

मेरा मामला यह है:

  • मेरे पास एक ही डोमेन के तहत अलग-अलग आभासी निर्देशिकाओं में एपीआई परियोजना और एपीपी परियोजना है
  • रूट पेज XXX को अपने बच्चों को वर्चुअल निर्देशिकाओं में ASPNETCORE_ENVIRONMENT चर का प्रचार नहीं लगता है और ...
  • ... मैं वर्चुअल निर्देशिका के अंदर वैरिएबल सेट करने में असमर्थ हूं जैसा कि @NickAb ने वर्णन किया है (त्रुटि मिली है अनुरोध समर्थित नहीं है ( कॉन्फ़िगरेशन संपादक में परिवर्तन के दौरान HRESULT से अपवाद: 0x80070032 ):
  • ApplicationHost.config में जा रहे हैं और मैन्युअल रूप से इस तरह नोड बना रहे हैं:

    <location path="XXX/app"> <system.webServer> <aspNetCore> <environmentVariables> <clear /> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" /> </environmentVariables> </aspNetCore> </system.webServer> </location> <location path="XXX/api"> <system.webServer> <aspNetCore> <environmentVariables> <clear /> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" /> </environmentVariables> </aspNetCore> </system.webServer> </location>

और IIS को पुनरारंभ करने ने काम किया।


0

त्रुटि के बारे में विवरण प्राप्त करने के लिए मुझे संबंधित अनुप्रयोग पूल के लिए पर्यावरण चर जोड़नाASPNETCORE_ENVIRONMENTsystem.applicationHost/applicationPools पड़ा ।

नोट: मेरे मामले में ASP.NET Core 2वेब एप्लिकेशन होस्ट किया गया वेब एप्लिकेशन था IIS 10। यह किया जा सकता है के माध्यम से Configuration Editorमें IIS Manager(देखें विन्यास संपादक के साथ संपादन संग्रह जहां में इस संपादक को खोजने के लिए यह पता लगाने की IIS Manager)।


0

मैंने IIS को Web.config में पर्यावरण कॉन्फ़िगरेशन के साथ प्रकाशित करने के लिए एक भंडार बनाया है।

https://github.com/expressiveco/AspnetCoreWebConfigForEnvironment

  • सेट अप
    • अपनी प्रोजेक्ट फ़ाइलों में .csproj और .user.csproj फ़ाइलों से अनुभाग प्राप्त करें।
    • MyAspNetEnvironment.props, web.development.config और web.production.config फ़ाइलें प्राप्त करें।
  • विन्यास
    • प्रासंगिक रूप से user.csproj में ASPNETCORE_ENVIRONMENT संपत्ति का मान बदलें।

यह प्रश्न का गुणवत्तापूर्ण उत्तर प्रदान नहीं करता है । कृपया इस समाधान के समग्र विवरण को जोड़ने के लिए या तो अपना उत्तर संपादित करें, या बस इसे हटा दें और प्रश्न के लिए टिप्पणी के रूप में पोस्ट करें। धन्यवाद!
s --unıɐ ɐ qɐp

0

मैंने उस उत्तर को संशोधित किया है जो @Christian Del Bianco को दिया गया है। मैंने .net कोर 2 और ऊपरी के लिए प्रक्रिया को प्रोजेक्ट के रूप में बदल दिया है। अब पूरी तरह से फ़ाइल के लिए।

  1. सबसे पहले, रूट डायरेक्टरी में appsettings.json फाइल बनाएं । सामग्री के साथ

      {
         // Possible string values reported below. When empty it use ENV 
            variable value or Visual Studio setting.
         // - Production
         // - Staging
         // - Test
        // - Development
       "ASPNETCORE_ENVIRONMENT": "Development"
     }
    
  2. फिर एक और दो सेटिंग फ़ाइल appsettings.Development.json और appsettings.Product.json बनाएँ आवश्यक कॉन्फ़िगरेशन के साथ।

  3. Program.cs फ़ाइल में वातावरण सेट करने के लिए आवश्यक कोड जोड़ें ।

    public class Program
    {
    public static void Main(string[] args)
    {
        var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
    
      ***var currentDirectoryPath = Directory.GetCurrentDirectory();
        var envSettingsPath = Path.Combine(currentDirectoryPath, "envsettings.json");
        var envSettings = JObject.Parse(File.ReadAllText(envSettingsPath));
        var enviromentValue = envSettings["ASPNETCORE_ENVIRONMENT"].ToString();***
    
        try
        {
            ***CreateWebHostBuilder(args, enviromentValue).Build().Run();***
        }
        catch (Exception ex)
        {
            //NLog: catch setup errors
            logger.Error(ex, "Stopped program because of setup related exception");
            throw;
        }
        finally
        {
            NLog.LogManager.Shutdown();
        }
    }
    
    public static IWebHostBuilder CreateWebHostBuilder(string[] args, string enviromentValue) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .ConfigureLogging(logging =>
            {
                logging.ClearProviders();
                logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
            })
            .UseNLog()
            ***.UseEnvironment(enviromentValue);***
    

    }

  4. प्रकाशित निर्देशिका में कॉपी के लिए अपनी .csproj फ़ाइल में envsettings.json जोड़ें ।

       <ItemGroup>
            <None Include="envsettings.json" CopyToPublishDirectory="Always" />
        </ItemGroup>
    
  5. अब बस ASPNETCORE_ENVIRONMENT को बदलें जैसा कि आप envsettings.json फ़ाइल में प्रकाशित और प्रकाशित करना चाहते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.