IIS'ye yayınlayın, Ortam Değişkenini ayarlayın


135

Bu iki soruyu / cevabı okurken IIS 8.5 sunucusunda bir Asp.net 5 uygulaması çalıştırabildim.

Asp.net vNext erken beta Windows sunucusunda IIS'ye yayınlama

Bir MVC6 uygulaması IIS üzerinde çalışacak şekilde nasıl yapılandırılır?

Sorun, web uygulamasının IIS üzerinde çalıştırıldığında bile hala env.EnvironmentNamedeğerli kullanıyor olmasıdır Development.

Ayrıca, aynı sunucuda aynı Web'in iki sürümünü (Aşama, Üretim) çalıştırmak istiyorum, bu nedenle her Web için değişkeni ayrı ayrı ayarlamak için bir yönteme ihtiyacım var.

Bu nasıl yapılır?


4
Birinin tipik olarak üç ağ ortamı Geliştirme, Hazırlama ve Üretim vardır. Web sunucusu bir ortamdadır. Bu nedenle, sunucu için sistem ortamı değişkeninin ayarlanması tipik olarak gerçek bir kısıtlama değildir. Bir hâlâ kullanabilirsiniz Properties\launchSettings.jsoniçin simüle Visual Studio hata ayıklama için bir başka ortam.
Oleg

Yanıtlar:


286

Bu cevap orijinal olarak ASP.NET Core RC1 için yazılmıştır. RC2'de ASP.NET Core, genel httpPlafrom işleyicisinden aspnetCore'a özgü bir işleyiciye taşındı. Adım 3'ün, kullandığınız ASP.NET Core sürümüne bağlı olduğunu unutmayın.

ASP.NET Core projeleri için ortam değişkenlerinin, kullanıcı için ortam değişkenleri ayarlamak zorunda kalmadan veya birden çok komut girişi oluşturmak zorunda kalmadan ayarlanabilir.

  1. IIS'deki uygulamanıza gidin ve seçin Configuration Editor.
  2. seçmek Configuration Editor
  3. Seç system.webServer/aspNetCore(RC2 ve RTM) ya da system.webServer/httpPlatformiçinde (RC1) Sectioncombobox
  4. Birleşik Applicationhost.config ...giriş Fromkutusunda seçin .
  5. Öğeye sağ tıklayın , ardından enviromentVariablesseçin . 'environmentVariables' elementEdit Itemsgörüntü açıklamasını buraya girin
  6. Ortam değişkenlerinizi ayarlayın.
  7. Pencereyi kapatın ve Uygula'yı tıklayın.
  8. Bitti

Bu şekilde, havuzunuz için özel kullanıcılar oluşturmanız veya içinde fazladan komut girişleri oluşturmanız gerekmez project.json. Ayrıca, her ortam için özel komutlar eklemek, bir kez dnu publishyayınlamak ve ortaya çıkan yapıyı birçok kez dağıtmak yerine her ortam için ayrı ayrı çağırmanız gerekeceğinden "bir kez oluşturun, birçok kez dağıtın" işlemini bozar.

Mark G ve tredder sayesinde RC2 ve RTM için güncellendi.


12
3. adımda system.webServer/aspNetCorebunun yerine kullandım .
Mark G

1
Sistem ortamı değişkenleri, başlangıçta süreçler tarafından miras alınır. Dolayısıyla, uygulamanızın çalışması sırasında bazı env değişkenini değiştirirseniz, bu değişiklikleri varsayılan olarak göremezsiniz. Sistem env var değişikliklerinin etkili olması için, IIS'nin işlemleri nasıl oluşturduğuna bağlı olarak en azından siteyi, belki havuzu veya hatta IIS hizmetini yeniden başlatmanız gerekir. Bunun test edilmesi gerekiyor.
NickAb

7
Yapılandırma Düzenleyicisi aracılığıyla eklenen ayarlar bir sonraki dağıtımda silinmeyecek mi?
Brad Gardner

11
@ brad-gardner, web.config yerine Applicationhost.config dosyasında değişiklik yapılırsa, değişiklikler dağıtımlar arasında kalıcı olacaktır.
NickAb

15
Asp.Net Core 2.0
Frank Cannon

35

<aspNetCore> altındaki < environmentVariables> bölümü ile web.config'i güncelleyin

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

Veya web.config'in üzerine yazarken bu ayarı kaybetmemek için , site konumunu @ NickAb'ın önerdiği şekilde belirterek applicationHost.config dosyasında benzer değişiklikler yapın .

<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
Bu, web.config'inizin projenin bir parçası olması ve VCS'de sürümlendirilmesi açısından farklıdır. Prod, staging, dev gibi birden fazla ortamınız varsa, her biri için web.config dosyasını dönüştürmek için bir yola ihtiyacınız olacaktır. IIS'de ApplicationHost.config'in değiştirilmesi yalnızca bu IIS'yi etkiler. Böylece, VCS'nizde tek bir web.config ve web.config değişkenlerini geçersiz kılan IIS'ye özgü ortam değişkenlerine sahip olabilirsiniz. ApplicationHost.config, PowerShell iis.net/learn/manage/powershell/…
NickAb

Teşekkürler @NickAb, bu her dağıtımda web.config'i güncelleme zorunluluğunu ortadan kaldırır. Cevabımı güncelledim.
Trevor Daniels

Bunu powershell'den yapmakta sorun yaşıyorum Target configuration object '/system.webServer/aspNetCore/environmentVariables/environmentVariable is not found ... Normalde bir değişken ayarlamaya devam ediyorum, şöyle bir şey Set-WebConfigurationProperty -PSPath IIS:\ -location example.com -filter /system.webServer/aspNetCore/environmentVariables/environmentVariable -name ASPNETCORE_ENVIRONMENT -value Staging yazardım : Neyi kaçırıyorum?
Christian

Bildiğim şeye geri döndüm ve appcmdonun yerine kullandım .
Christian

@Christian, şu yanıtı kontrol edin: stackoverflow.com/a/50869935/33533 Ortam değişkeni adı ve değeri bir hash tablosuna giriyor, yani sizin örneğinize göreSet-WebConfigurationProperty -PSPath IIS:\ -Location example.com -Filter /system.webServer/aspNetCore/environmentVariables -Name . -Value @{ Name = 'ASPNETCORE_ENVIRONMENT'; Value = 'Staging' }
Curtis

21

Düzenleme: RC2 ve RTM sürümleri itibariyle bu tavsiye güncel değildir. Bunu sürümde gerçekleştirmenin en iyi yolu, her ortam için IIS'de aşağıdaki web.config bölümlerini düzenlemektir:

system.webServer/aspNetCore:

EnvironmentVariable girişini düzenleyin ve bir ortam değişkeni ayarı ekleyin:

ASPNETCORE_ENVIRONMENT : < Your environment name >


Drpdrp'nin yaklaşımına alternatif olarak şunları yapabilirsiniz:

  • Project.json dosyanızda, ASPNET_ENV değişkenini doğrudan Kestrel'e ileten komutları ekleyin:

    "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"
    }
    
  • Yayınlarken, --iis-commandbir ortam belirtme seçeneğini kullanın:

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

Bu yaklaşımı fazladan IIS kullanıcıları oluşturmaktan daha az müdahaleci buldum.


11
Visual Studio'nun msdeploy'u aracılığıyla yayınlıyorsanız. Daha sonra .pubxml dosyanıza <IISCommand> Staging </IISCommand> koyabilirsiniz ve bunu yayınlama kullanıcı arayüzünde belirtemeseniz bile belirtilen IIS komutunu kullanarak konuşlandırılır.
Dean North

@DeanNorth - Bu altın !! Bir şampiyon gibi çalışır! Paylaşım için teşekkürler!
S. Rasmussen

17

Web uygulamalarım (ÜRETİM, SAHNE, TEST) IIS web sunucusunda barındırılıyor. Bu nedenle, ASPNETCORE_ENVIRONMENT işlemcisinin sistem ortam değişkenine güvenmek mümkün değildi, çünkü onu belirli bir değere ayarlamak (örneğin, STAGING) diğer uygulamalar üzerinde etkiye sahiptir.

Çözüm olarak, visualstudio çözümümde özel bir dosya (envsettings.json) tanımladım:

görüntü açıklamasını buraya girin

aşağıdaki içeriğe sahip:

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

Ardından, uygulama tipime (Üretim, Aşama veya Test) göre bu dosyayı uygun şekilde ayarladım: TEST uygulamasını dağıttığımı varsayarsak, şunlara sahip olacağım:

"ASPNETCORE_ENVIRONMENT": "Test"

Bundan sonra, Program.cs dosyasında sadece bu değeri alın ve ardından webHostBuilder'ın ortamını ayarlayın:

    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 dosyasını publishOptions'a (project.json) dahil etmeyi unutmayın:

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

Bu çözüm, ASP.NET CORE uygulamasının envoroment değişken değerinden bağımsız olarak aynı IIS üzerinde barındırılmasına izin vermemi sağlıyor.


Çok güzel, önerdiğim tek değişiklik takas var currentDirectoryPath = Directory.GetCurrentDirectory (); var currentDirectoryPath = PlatformServices.Default.Application.ApplicationBasePath için; Bu, mevcut dizini almanın çok daha güvenli bir yoludur.
Peter Kottas

7
Bir çerçevenin yapılandırmalarını yönetmek için başka bir yapılandırma katmanı oluşturmanız gerektiğinde, kutudan çıkan harika bir deneyim
Kugel

16

Kapsamlı bir google araştırmasından sonra, iki adımdan oluşan çalışan bir çözüm buldum.

İlk adım, sistem çapında ortam değişkenini ASPNET_ENV'yi Üretim olarak ayarlamak ve Windows Sunucusunu Yeniden Başlatmaktır . Bundan sonra, tüm web uygulamaları EnvironmentName olarak 'Üretim' değerini alıyor.

İkinci adım (web sahneleme için 'Evreleme' değerini etkinleştirmek için) doğru bir şekilde çalışmak oldukça zordu, ama işte burada:

  1. Yeni Windows kullanıcısı oluşturun, örneğin sunucuda StagingPool .
  2. Bu kullanıcı için, 'Staging' değerine sahip yeni kullanıcı değişkeni ASPNETCORE_ENVIRONMENT oluşturun (bunu bu kullanıcı olarak veya regedit aracılığıyla oturum açarak yapabilirsiniz)
  3. IIS yöneticisinde yönetici olarak geri döndüğünüzde, Staging web'in altında çalıştığı Uygulama Havuzunu bulun ve Gelişmiş Ayarlar'da Identity'yi kullanıcı StagingPool olarak ayarlayın .
  4. Ayrıca set Yük Kullanıcı Profili için gerçek ortam değişkenleri yüklenir böylece. <- çok önemli!
  5. StagingPool'un web klasörüne ve Uygulama Havuzunu Durdur ve Başlat'a erişim haklarına sahip olduğundan emin olun .

Şimdi Staging web sitesinde EnvironmentName 'Staging' olarak ayarlanmış olmalıdır.

Güncelleme: Windows 7+ içinde, CMD isteminden ortam değişkenlerini belirli bir kullanıcı için de ayarlayabilen bir komut vardır. Bu çıktılar artı örneklere yardımcı olur:

>setx /?

1
ASP.NET 5 RC1'de ortam değişkeninin Hosting: Environment olarak değiştirildiği görülmektedir.
Grady Werner

Bunu Azure Web App'e dağıtırken "Kullanıcı Profilini Yükle" yi nasıl doğru olarak ayarlayabiliriz?
Puneet Ghanshani

@PunitGanshani Anladığım kadarıyla, web uygulaması için Azure portalında ortam anahtarı / değer çiftlerini ayarlayabileceğiniz bir "uygulama ayarları" bölümü var: azure.microsoft.com/en-us/documentation/articles/…
drpdrp

@GradyWerner RC2 için (şu an itibariyle) ASPNET_ENVIRONMENT ;-) olarak değiştiriyorlar
b.pell

1
@ b.pell Görünüşe göre artık ASPNETCORE_ENVIRONMENT :)
Mark G

11

Alternatif olarak, istediğinizi ASPNETCORE_ENVIRONMENTdotnet publish komutunu bir argüman olarak şunu kullanarak iletebilirsiniz :

/p:EnvironmentName=Staging

Örneğin:

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

Bu, projeniz için belirtilen doğru ortamla web.config'i oluşturacaktır:

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

9

Yukarıda bahsedilen seçenekler dışında, otomatik dağıtımlarla iyi çalışan veya daha az yapılandırma değişikliği gerektiren birkaç başka Çözüm vardır.

1. Proje dosyası (.CsProj) dosyasını değiştirme

MSBuild, EnvironmentNameDağıtmak istediğiniz Ortama göre doğru ortam değişkenini ayarlamanıza yardımcı olabilecek Özelliği destekler . Ortam adı, Yayınlama aşaması sırasında web.config dosyasına eklenecektir.

Proje dosyasını (* .csProj) açın ve aşağıdaki XML'yi ekleyin.

<!-- 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>

Yukarıdaki kod, DevelopmentDebug yapılandırmasında olduğu gibi veya herhangi bir yapılandırma belirtilmemişse ortam adını ekleyecektir . Diğer herhangi bir Yapılandırma için Ortam adı Productionoluşturulan web.config dosyasında olacaktır. Daha fazla ayrıntı burada

2. Yayınlama profillerine EnvironmentName Özelliğini ekleme.

<EnvironmentName>Mülkü yayın profiline de ekleyebiliriz . İçinde bulunan yayınlama profili dosyasını açın Properties/PublishProfiles/{profilename.pubxml}Bu, proje yayınlandığında web.config'deki Ortam adını belirleyecektir. Daha fazla ayrıntı burada

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

3. dotnet publish kullanan komut satırı seçenekleri

Ek olarak, özelliği EnvironmentNamekomuta bir komut satırı seçeneği olarak iletebiliriz dotnet publish. Aşağıdaki komut Development, web.config dosyasındaki gibi ortam değişkenini içerecektir .

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


7

@ Tredder'ın cevabını genişletmek için, ortam Değişkenlerini kullanarak değiştirebilirsiniz. appcmd

sahneleme

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

Üretim

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


IIS kurulu olmayan bir derleme sunucusunda Powershell ile aynı şeyi nasıl yapacağınız aşağıda açıklanmıştır. gist.github.com/markarnott/c4aec1fc544fe89e2bd21f3f00d78933
Mark Arnott

"Staging.example.com" veya "example.com" u belirtmek, değişkeni yalnızca bu belirli web sitelerine uygular. Bunun atlanması, sunucudaki tüm web siteleri için genel bir değişken oluşturacaktır.
deadlydog

6

Bilmeniz gerekenler tek bir yerde:

  • Ortam değişkenlerinin herhangi bir yapılandırma ayarını geçersiz kılması için, bunların önekinin olması gerekir ASPNETCORE_.
  • JSON yapılandırmanızdaki alt düğümleri eşleştirmek istiyorsanız, ayırıcı :olarak kullanın . Platform, ortam değişken anahtarlarında iki nokta üst üste kullanımına izin vermiyorsa, __bunun yerine kullanın.
  • Ayarlarınızın sona ermesini istiyorsunuz ApplicationHost.config. IIS Yapılandırma Düzenleyicisini kullanmak, girdilerinizin uygulamaya Web.configyazılmasına neden olur ve bir sonraki dağıtımda bunların üzerine yazılır!
  • Değiştirmek için ApplicationHost.config, appcmd.exedeğişikliklerinizin tutarlı olduğundan emin olmak için kullanmak istersiniz . Misal:%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 açısından güvenli olmayan karakterler, %u007bsol kıvrımlı parantez gibi, Unicode olarak atlanabilir .

  • Mevcut ayarlarınızı listelemek için (Web.config'deki değerlerle birlikte): %systemroot%\system32\inetsrv\appcmd.exe list config "Default Web Site/MyVirtualDir" -section:system.webServer/aspNetCore
  • Aynı anahtar için bir yapılandırma anahtarı ayarlamak için komutu birden çok kez çalıştırırsanız, birden çok kez eklenecektir! Mevcut bir değeri kaldırmak için gibi bir şey kullanın %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
Not o /commit:sitedeğişiklikler sırayla, web.config yazılır bunları kaydetmek için ApplicationHost.configkullanması gereken biri/commit:apphost
Melek Yordanov

-section:system.webServer/aspNetCore /-"environmentVariables.(ortam değişkenini kaldırmak için eksi ile) Azure yayın işlem hattı sırasında yürütülemez. Hata hresult:80070032, message:Command execution failed. Ancak iyi clear config "Default Web Site/$(webSiteName)" -section:system.webServer/aspNetCore /commit:siteçalışıyor. Web sitesi için tüm aspNetCore bölümünü temizler, ancak sürüm sırasında parametreleştirildiği için sorun teşkil etmez.
oleksa

6

Diğer yanıtlara benzer şekilde, ASP.NET Core 2.1 ortam ayarımın dağıtımlarda kalıcı olmasını, ancak yalnızca belirli siteye uygulanmasını istedim.

Microsoft'un belgelerine göre, IIS 10'da aşağıdaki PowerShell komutunu kullanarak uygulama havuzunda ortam değişkenini ayarlamak mümkündür:

$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

Maalesef hala IIS 8.5'i kullanmam gerekiyor ve şansım kalmadı. Ancak, ASPNETCORE_ENVIRONMENT için siteye özgü bir ortam değişkeni değeri ayarlamak için basit bir PowerShell betiği çalıştırmak hala mümkündür:

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

@tredder çözümü, applicationHost.config düzenleme ile IIS üzerindeki sanal dizinlerde bulunan birkaç farklı uygulamanız varsa çalışan çözümdür .

Benim durumum:

  • Sahibim API projesi ve APP farklı sanal dizinlere yerleştirilir, aynı etki altında, proje
  • Kök sayfası XXX , ASPNETCORE_ENVIRONMENT değişkenini sanal dizinlerdeki çocuklarına yaymıyor gibi görünüyor ve ...
  • ... Sanal dizinin içindeki değişkenleri @ NickAb'nin açıkladığı gibi ayarlayamıyorum (hata aldım İstek desteklenmiyor. (HRESULT istisnası : 0x80070032) Yapılandırma Düzenleyicide değişiklikleri kaydederken):
  • Girecek applicationHost.config böyle düğümleri oluşturma ve elle:

    <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>

ve IIS'nin yeniden başlatılması işi yaptı.


0

Hatayla ilgili ayrıntıları almak için, ilgili Uygulama Havuzu için ortam değişkeni eklememASPNETCORE_ENVIRONMENTsystem.applicationHost/applicationPools gerekiyordu .

Not: Benim durumumdaki ASP.NET Core 2web uygulaması, üzerinde barındırılan web uygulamasıydı IIS 10. Bu, Configuration Editorin aracılığıyla yapılabilir IIS Manager( bu düzenleyiciyi nerede bulacağınızı öğrenmek için bkz. Yapılandırma Düzenleyicisi ile Koleksiyonları DüzenlemeIIS Manager ).


0

Web.config'deki ortam yapılandırmasıyla IIS'yi yayımlamak için bir depo oluşturdum.

https://github.com/expressiveco/AspnetCoreWebConfigForEnvironment

  • Kurmak
    • .Csproj ve .user.csproj dosyalarındaki bölümleri proje dosyalarınıza alın.
    • MyAspNetEnvironment.props, web.development.config ve web.production.config dosyalarını alın.
  • Yapılandırma
    • User.csproj içindeki ASPNETCORE_ENVIRONMENT özelliğinin değerini uygun şekilde değiştirin.

Bu, soruya kaliteli bir cevap sağlamıyor gibi görünüyor . Lütfen ya bu çözümün genel ayrıntılarını ekleyerek yanıtınızı düzenleyin ya da kaldırıp soruya yorum olarak gönderin. Teşekkürler!
sɐunıɔ ןɐ qɐp

0

@Christian Del Bianco'nun verdiği yanıtı değiştirdim . .Net core 2 ve üstü için olan süreci project.json dosyası olarak değiştirdim artık mutlak.

  1. İlk olarak, kök dizinde appsettings.json dosyasını oluşturun . içerikle

      {
         // Possible string values reported below. When empty it use ENV 
            variable value or Visual Studio setting.
         // - Production
         // - Staging
         // - Test
        // - Development
       "ASPNETCORE_ENVIRONMENT": "Development"
     }
    
  2. Daha sonra iki tane daha appsettings ayar dosyası oluşturun: appsettings.Development.json ve appsettings.Production.json , gerekli yapılandırmaya sahip .

  3. Ortamı Program.cs dosyasına ayarlamak için gerekli kodu ekleyin .

    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. Ekle envsettings.json sizin için .csproj yayınlanan dizinin kopya için dosyanın.

       <ItemGroup>
            <None Include="envsettings.json" CopyToPublishDirectory="Always" />
        </ItemGroup>
    
  5. Şimdi sadece ASPNETCORE_ENVIRONMENT'ı envsettings.json dosyasında istediğiniz gibi değiştirin ve yayınlayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.