Geliştirme ve üretim ortamında farklı Web.config kullanma


194

ASP.NET uygulamamda geliştirme veya üretim ortamında çalıştırılmasına bağlı olarak farklı veritabanı bağlantı dizesi ve SMTP sunucu adresi kullanmam gerekiyor.

Uygulama, ayarları WebConfigurationManager.AppSettings özelliği aracılığıyla Web.config dosyasından okur .

Uygulamayı FTP aracılığıyla üretim sunucusuna dağıtmak ve sonra uzak Web.config dosyasını doğru olanla değiştirmek için Oluştur / Yayınla komutunu kullanıyorum.

Dağıtım sürecini bir şekilde basitleştirmek mümkün mü? Teşekkürler!

Yanıtlar:


159

Visual Studio 2010 ve sonraki sürümlerinde, derleme yapılandırmasına bağlı olarak artık web.config dosyasına bir dönüşüm uygulayabilirsiniz.

Bir web.config dosyası oluştururken, dosyayı çözüm gezgininde genişletebilir ve iki dosya görürsünüz:

  • Web.Debug.Config
  • Web.Release.Config

Kullanılabilecek dönüşüm kodu içerir

  • Bağlantı dizesini değiştirme
  • Hata ayıklama izini ve ayarlarını kaldırma
  • Hata sayfalarını kaydetme

Daha fazla bilgi için bkz. MSDN'de Web Uygulaması Projesi Dağıtımı için Web.config Dönüştürme Sözdizimi .

Resmi olarak desteklenmemekle birlikte, aynı türde bir dönüşümü web dışı bir uygulama app.configdosyasına uygulamak da mümkündür . Msbuild'e yeni bir görev eklemek için proje dosyanızı nasıl değiştireceğinizle ilgili Phil Bolduc bloguna bakın .

Bu, Visual Studio Uservoice için uzun süredir devam eden bir istektir .

Herhangi bir yapılandırma dosyası için dönüştürme oluşturmaya özen göstermek için Visual Studio 2010 ve üzeri " SlowCheetah " için bir uzantı mevcuttur. Visual Studio 2017.3'ten başlayarak, SlowCheetah IDE'ye entegre edilmiştir ve kod tabanı Microsoft tarafından yönetilmektedir. Bu yeni sürüm JSON dönüşümünü de desteklemektedir.


7
Bunun eski web sitesi projeleri için çalışmadığını unutmayın . Sadece web uygulamaları için . Phil Bolduc'ın geçici çözümünün web siteleri için işe yarayıp yaramadığını görmeye çalışmadım, ancak proje dosyaları olmadığı için olmayacağını sanıyorum.
mo.

13
Ayrıca web.confg dönüşümlerinin yalnızca YAYINLAMA için çalıştığını, sadece F5'i oluşturup çalıştırdığınızda çalışmadığını unutmayın: ((((
Alex

7
Web.config bir içermiyorsa Web.Debug.Configve Web.Release.Configdoğru tıklama gerekebilir Web.Configve tıklayın Add Config Transforms.
Doug S

1
@Alex: Basit yapı / F5 için nasıl kullanabiliriz?
punter

1
SlowCheetah'a doğrudan bağlantı: marketplace.visualstudio.com/…
Xiao

83

<appSettings>Web.config içindeki etiket, harici bir yapılandırmayı kendi anahtar / değer kümesiyle yükleyecek bir dosya özniteliğini destekler. Bunlar, web.config dosyasında bulunan tüm ayarları geçersiz kılar veya bunlara ekler.

Web.config dosyamızı yükleme sırasında sitenin yüklendiği ortamla eşleşen bir dosya özniteliğiyle değiştirerek bundan yararlanıyoruz. Bunu kurulumcumuzdaki bir anahtarla yapıyoruz.

Örneğin;

<appSettings file=".\EnvironmentSpecificConfigurations\dev.config">

<appSettings file=".\EnvironmentSpecificConfigurations\qa.config">

<appSettings file=".\EnvironmentSpecificConfigurations\production.config">

Not:

  • Öznitelik tarafından belirtilen .config dosyasında yapılan değişiklikler, asp.net alt işleminin yeniden başlatılmasını tetiklemez

2
Bu, özellikle çok sayıda ortamınız olduğunda ve bazı ortamlar için bazı ayarların kaynak kontrolünde izlenmesini istemediğiniz şifreler ve benzerleri olduğunda mükemmel bir cevaptır.
Phil

1
Dosya yolunu değiştirmenin dinamik bir yolu var mı? Hangi sunucuda olduğunuza göre? Sadece bir yan not, bu bir web uygulaması değil, eski bir web sitesi projesi üzerinde çalışıyor. Çok teşekkür ederim!
Perspektif

2
restartOnExternalChangesBu dosyaları web.configs gibi ele alacak bir öznitelik vardır. Kaynak: learnable.com/books/…
David Schwartz


13

Ben de bilmek istiyorum. Bu benim için sorunun izole edilmesine yardımcı oluyor

<connectionStrings configSource = "connectionStrings.config" />

Sonra bir connectionStrings.config yanı sıra bir "{host} connectionStrings.config" tutmak. Bu hala bir sorun, ancak bunu iki ortamda farklı olan bölümler için yaparsanız, aynı web.config dosyasını dağıtabilir ve sürümleyebilirsiniz.

(Ve VS kullanmıyorum, btw.)


VS kullanıyorsanız, bir debug.connectionstrings.config veya release.connectionstrings.config dosyasından kopyalamak için prebuild-events komutunu kullanabilirsiniz: copy $ (ProjectDir) $ (ConfigurationName) ConnectionStrings.config $ (ProjectDir) ConnectionStrings.config önerildiği gibi Scott tarafından. Hanselmann: hanselman.com/blog/…
Thomas

6

Farklı ortamlarıma dağıtmak için bir NAnt Yapı Komut Dosyası kullanıyorum. Yapılandırma dosyalarımı nereye dağıtıldıklarına bağlı olarak XPath aracılığıyla değiştirdiğimden sonra Karşılaştırmanın Ötesini kullanarak otomatik olarak bu ortama koyar .

Kurulumu bir veya iki dakika sürer, ancak yalnızca bir kez yapmanız gerekir. Sonra ben başka bir fincan kahve alırken toplu dosyaları ele geçirir. :)

İşte üzerinde bulduğum bir makale.


5

4 ortamımızın (geliştirme, test, evreleme ve üretim) sahip olduğu bir projede, uygulamanın konuşlandırıldığı makine adına göre uygun yapılandırmayı seçtiği bir sistem geliştirdik.

Bu bizim için çalıştı çünkü:

  • yöneticiler, geliştiricileri dahil etmeden (bir gereksinim) ve yapılandırma dosyalarıyla (nefret ettikleri) uğraşmak zorunda kalmadan uygulamaları dağıtabilir;
  • konvansiyona bağlı makine isimleri. Adları normal bir ifade kullanarak eşleştirdik ve bir ortamda birden çok makineye dağıttık; ve
  • bağlantı dizeleri için entegre güvenlik kullandık. Bu, hesap adlarını herhangi bir şifre göstermeden yapılandırma dosyalarımızda tasarım zamanında tutabileceğimiz anlamına gelir.

Bu durumda bizim için iyi çalıştı, ama muhtemelen her yerde işe yaramazdı.


3

Enterprise Library yapılandırma düzenleyicisi bunu yapmanıza yardımcı olabilir. Bir temel yapılandırma dosyası ve ardından her ortam için deltalar oluşturmanıza olanak tanır. Daha sonra, ortama özgü bir web.config oluşturmak için temel yapılandırmayı ve deltayı birleştirebilirsiniz. Bilgilere bir göz atın burada benden daha iyi içinden götürür.


3

Ayrıca bir post-build adımı da yapabilirsiniz. Hata Ayıkla ve Serbest Bırak ek olarak "Dağıt" olan yeni bir yapılandırma oluşturun ve sonra da oluşturma sonrası adım doğru web.config üzerinden kopyalayın.

Tüm projelerimiz için otomatik derlemeler kullanıyoruz ve bu derlemelerle web.config dosyasını doğru konuma işaret edecek şekilde günceller. Ama VS'den her şeyi yapıyorsanız bu size yardımcı olmaz.


3

Bu, machine.config dosyasının kullanılmasının en büyük avantajlarından biridir. Son işimde geliştirme, test ve üretim ortamlarımız vardı. Machine.config dosyasını bağlantı dizeleri (uygun, dev / test / prod SQL makinesine) gibi şeyler için kullanabiliriz.

Gerçek üretim makinesine erişiminiz yoksa (örneğin, paylaşılan bir ana bilgisayarda bir barındırma şirketi kullanıyorsanız) bu sizin için bir çözüm olmayabilir.


1

"Configuration Transform" uzantısını "SlowCheetah" ile aynı şekilde kullanabilirsiniz,


evet çalışır ama derleme üzerinde değil, sadece dağıtmak, keşke ben sadece derlemek ve farklı yapılandırma dönüşüm ortamları kullanarak hata ayıklamak isterdim
Ch'nycos
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.