Membaca dua pertanyaan / jawaban ini saya dapat menjalankan aplikasi Asp.net 5 di server IIS 8.5.
Asp.net vNext beta awal diterbitkan ke IIS di windows server
Bagaimana cara mengkonfigurasi aplikasi MVC6 agar berfungsi pada IIS?
Masalahnya adalah bahwa aplikasi web masih menggunakan env.EnvironmentName
dengan nilai Development
bahkan ketika dijalankan di IIS.
Juga, saya ingin menjalankan dua versi Web yang sama (Pementasan, Produksi) pada server yang sama, jadi saya perlu metode untuk mengatur variabel untuk setiap Web secara terpisah.
Bagaimana cara melakukannya?
Properties\launchSettings.json
untuk mensimulasikan lingkungan lain untuk debugging di Visual Studio.Jawaban:
Jawaban ini awalnya ditulis untuk ASP.NET Core RC1. Dalam RC2 ASP.NET Core pindah dari handler httpPlafrom generik ke aspnetCore yang spesifik. Perhatikan bahwa langkah 3 tergantung pada versi ASP.NET Core apa yang Anda gunakan.
Ternyata variabel lingkungan untuk proyek-proyek ASP.NET Core dapat diatur tanpa harus menetapkan variabel lingkungan untuk pengguna atau harus membuat beberapa entri perintah.
Configuration Editor
.Configuration Editor
system.webServer/aspNetCore
(RC2 dan RTM) atausystem.webServer/httpPlatform
(RC1) dalam kotakSection
komboApplicationhost.config ...
dalam kotakFrom
kombo.enviromentVariables
elemen, pilih'environmentVariables' element
, laluEdit Items
.Dengan cara ini Anda tidak perlu membuat pengguna khusus untuk kumpulan Anda atau membuat entri perintah tambahan
project.json
. Juga, menambahkan perintah khusus untuk setiap kerusakan lingkungan "build sekali, sebarkan berkali-kali" karena Anda harus memanggildnu publish
secara terpisah untuk setiap lingkungan, alih-alih menerbitkan sekali dan menggunakan artefak yang dihasilkan berkali-kali.Diperbarui untuk RC2 dan RTM, terima kasih kepada Mark G dan tredder.
sumber
system.webServer/aspNetCore
sebagai gantinya.Perbarui web.config dengan bagian <environmentVariables> di bawah <aspNetCore>
Atau untuk menghindari kehilangan pengaturan ini saat menimpa web.config, buat perubahan serupa ke applicationHost.config dengan menetapkan lokasi situs seperti yang disarankan @NickAb.
sumber
Target configuration object '/system.webServer/aspNetCore/environmentVariables/environmentVariable is not found ...
Biasanya untuk menetapkan beberapa variabel saya akan menulis sesuatu seperti ini:Set-WebConfigurationProperty -PSPath IIS:\ -location example.com -filter /system.webServer/aspNetCore/environmentVariables/environmentVariable -name ASPNETCORE_ENVIRONMENT -value Staging
apa yang saya hilang?appcmd
.Set-WebConfigurationProperty -PSPath IIS:\ -Location example.com -Filter /system.webServer/aspNetCore/environmentVariables -Name . -Value @{ Name = 'ASPNETCORE_ENVIRONMENT'; Value = 'Staging' }
Sunting: pada rilis RC2 dan RTM, saran ini kedaluwarsa. Cara terbaik yang saya temukan untuk menyelesaikan ini dalam rilis adalah dengan mengedit bagian web.config berikut di IIS untuk setiap lingkungan:
system.webServer/aspNetCore
:Edit entri environmentVariable dan tambahkan pengaturan variabel lingkungan:
ASPNETCORE_ENVIRONMENT
:< Your environment name >
Sebagai alternatif dari pendekatan drpdrp, Anda dapat melakukan hal berikut:
Di project.json Anda, tambahkan perintah yang meneruskan variabel ASPNET_ENV langsung ke Kestrel:
Saat menerbitkan, gunakan
--iis-command
opsi untuk menentukan lingkungan:Saya menemukan pendekatan ini kurang mengganggu daripada menciptakan pengguna IIS tambahan.
sumber
Saya memiliki aplikasi web saya (PRODUCTION, STAGING, TEST) di-host di server web IIS. Jadi tidak mungkin untuk bergantung pada variabel lingkungan sistem operatif ASPNETCORE_ENVIRONMENT, karena mengaturnya ke nilai tertentu (misalnya STAGING) berpengaruh pada aplikasi lain.
Sebagai solusi, saya mendefinisikan file khusus (envsettings.json) dalam solusi visualstudio saya:
dengan konten berikut:
Kemudian, berdasarkan pada jenis aplikasi saya (Produksi, Pementasan atau Uji) saya mengatur file ini sesuai: seandainya saya menggunakan aplikasi TEST, saya akan memiliki:
Setelah itu, dalam file Program.cs hanya mengambil nilai ini dan kemudian mengatur lingkungan webHostBuilder:
Ingatlah untuk menyertakan envsettings.json dalam publishOptions (project.json):
Solusi ini membuat saya bebas untuk memiliki aplikasi ASP.NET CORE yang di-host pada IIS yang sama, terlepas dari nilai variabel envoroment.
sumber
Setelah googling ekstensif saya menemukan solusi yang berfungsi, yang terdiri dari dua langkah.
Langkah pertama adalah mengatur variabel lingkungan sistem lebar ASPNET_ENV ke Produksi dan Restart Windows Server . Setelah ini, semua aplikasi web mendapatkan nilai 'Produksi' sebagai EnvironmentName.
Langkah kedua (untuk mengaktifkan nilai 'Pementasan' untuk pementasan web) agak lebih sulit untuk bisa berfungsi dengan benar, tetapi ini dia:
Sekarang web Staging harus memiliki EnvironmentName diatur ke 'Staging'.
Pembaruan: Di Windows 7+ ada perintah yang dapat mengatur variabel lingkungan dari CMD prompt juga untuk pengguna tertentu. Output ini membantu plus sampel:
sumber
Atau Anda bisa meneruskan yang diinginkan
ASPNETCORE_ENVIRONMENT
ke dalam perintah dotnet publish sebagai argumen menggunakan:misalnya:
Ini akan menghasilkan web.config dengan lingkungan yang benar yang ditentukan untuk proyek Anda:
sumber
Selain opsi yang disebutkan di atas, ada beberapa Solusi lain yang bekerja dengan baik dengan penyebaran otomatis atau memerlukan lebih sedikit perubahan konfigurasi.
1. Memodifikasi file proyek (.CsProj) file
MSBuild mendukung
EnvironmentName
Properti yang dapat membantu mengatur variabel lingkungan yang tepat sesuai Lingkungan yang ingin Anda Gunakan. Nama lingkungan akan ditambahkan di web.config selama fase Publikasikan.Cukup buka file proyek (* .csProj) dan tambahkan XML berikut.
Kode di atas akan menambahkan nama lingkungan
Development
untuk konfigurasi Debug atau jika tidak ada konfigurasi yang ditentukan. Untuk Konfigurasi lainnya, nama Lingkungan akan beradaProduction
di file web.config yang dibuat. Lebih detail di sini2. Menambahkan Properti EnvironmentName di profil terbitkan.
Kami dapat menambahkan
<EnvironmentName>
properti di profil terbitkan juga. Buka file profil publikasikan yang terletak diProperties/PublishProfiles/{profilename.pubxml}
Ini akan mengatur nama Lingkungan di web.config ketika proyek diterbitkan. Lebih detail di sini3. Opsi baris perintah menggunakan dotnet publish
Selain itu, kita bisa meneruskan properti
EnvironmentName
sebagai opsi baris perintah kedotnet publish
perintah. Perintah berikut akan menyertakan variabel lingkungan sepertiDevelopment
pada file web.config.dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development
sumber
Untuk memperluas jawaban @ tredder, Anda dapat mengubah environmentVariables menggunakan
appcmd
Pementasan
%windir%\system32\inetsrv\appcmd set config "staging.example.com" /section:system.webServer/aspNetCore /+environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Staging'] /commit:APPHOST
Produksi
%windir%\system32\inetsrv\appcmd set config "example.com" /section:system.webServer/aspNetCore /+environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Production'] /commit:APPHOST
sumber
Apa yang perlu Anda ketahui di satu tempat:
ASPNETCORE_
.:
sebagai pemisah. Jika platform tidak mengizinkan titik dua dalam kunci variabel lingkungan, gunakan__
saja.ApplicationHost.config
. Menggunakan Editor Konfigurasi IIS akan menyebabkan input Anda ditulis ke aplikasiWeb.config
- dan akan ditimpa dengan penyebaran selanjutnya!Untuk memodifikasi
ApplicationHost.config
, Anda ingin menggunakanappcmd.exe
untuk memastikan modifikasi Anda konsisten. Contoh:%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
Karakter yang bukan URL-safe dapat diloloskan sebagai Unicode, seperti
%u007b
untuk braket keriting kiri.%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
.sumber
/commit:site
perubahan ditulis di web.config, untuk menyimpannyaApplicationHost.config
harus digunakan/commit:apphost
-section:system.webServer/aspNetCore /-"environmentVariables.
(dengan minus untuk menghapus variabel lingkungan) gagal dijalankan selama pipa rilis Azure. Kesalahannya adalahhresult:80070032, message:Command execution failed
. Namunclear config "Default Web Site/$(webSiteName)" -section:system.webServer/aspNetCore /commit:site
berfungsi dengan baik. Itu menghapus bagian aspNetCore keseluruhan untuk situs web tetapi tidak masalah karena parametrized selama rilis.Mirip dengan jawaban lain, saya ingin memastikan pengaturan lingkungan ASP.NET Core 2.1 saya bertahan di seluruh penyebaran, tetapi juga hanya berlaku untuk situs tertentu.
Menurut dokumentasi Microsoft, dimungkinkan untuk mengatur variabel lingkungan di kumpulan aplikasi menggunakan perintah PowerShell berikut di IIS 10:
Sayangnya saya masih harus menggunakan IIS 8.5 dan berpikir saya kurang beruntung. Namun, masih dimungkinkan untuk menjalankan skrip PowerShell sederhana untuk menetapkan nilai variabel lingkungan khusus situs untuk ASPNETCORE_ENVIRONMENT:
sumber
Solusi @tredder dengan mengedit applicationHost.config adalah yang berfungsi jika Anda memiliki beberapa aplikasi berbeda yang terletak di dalam direktori virtual di IIS.
Kasus saya adalah:
Masuk ke applicationHost.config dan secara manual membuat node seperti ini:
<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>
dan memulai kembali IIS melakukan pekerjaan.
sumber
Untuk mendapatkan rincian tentang kesalahan saya harus menambahkan
ASPNETCORE_ENVIRONMENT
variabel lingkungan untuk Pool Aplikasi yang sesuaisystem.applicationHost/applicationPools
.Catatan: aplikasi web dalam kasus saya adalah
ASP.NET Core 2
aplikasi web yang dihosting padaIIS 10
. Ini dapat dilakukan melaluiConfiguration Editor
dalamIIS Manager
(lihat Mengedit Koleksi dengan Editor Konfigurasi untuk mengetahui di mana menemukan editor iniIIS Manager
).sumber
Saya telah membuat repositori untuk menerbitkan IIS dengan konfigurasi lingkungan di Web.config.
https://github.com/expressiveco/AspnetCoreWebConfigForEnvironment
sumber
Saya telah memodifikasi jawaban yang diberikan @Christian Del Bianco . Saya mengubah proses untuk .net core 2 dan lebih tinggi sebagai file project.json sekarang mutlak.
Pertama, buat file appsettings.json di direktori root. dengan konten
Kemudian buat dua pengaturan lain file appsettings.Development.json dan appsettings.Production.json dengan konfigurasi yang diperlukan.
Tambahkan kode yang diperlukan untuk mengatur lingkungan ke file Program.cs .
}
Tambahkan envsettings.json untuk Anda .csproj file untuk copy ke direktori diterbitkan.
Sekarang cukup ubah ASPNETCORE_ENVIRONMENT seperti yang Anda inginkan dalam file envsettings.json dan diterbitkan.
sumber