ASP.NET projenizi publish ederken settings değerleriniz veya connectin string değerlerinde sizin kullandığınız değerlerin olmasını istemiyorsanız o zaman farklı web.config dosyaları ayarlamalısınız.
ASP.NET Farklı Ortamlar için Web.config dosyası Üretimi(Web Transforms)
Şimdi bir web projesi oluşturalım yada varolan projenizde yer alan web.config dosyasındaki Connection string
değerini release modda publish ettiğimizde farklı veya boş connection string
bilgisi ile yapalım.
Web.config
dosyasını farklı modlara oluşturmak için Web.config
dosyanıza sağ tuş yapıp Add Config Transform
deyin eğer bu buton pasif durumdaysa o zaman tüm modlar için Web.config
dosyaları oluşturulmuştur. Farklı modlar için oluşturulmuş Web.config Transform
dosyaları alttaki gibi Web.config
dosyası altında yer alacaktır.
Gördüğünüz gibi Debug
ve Release
modları için farklı Web.config
dosyaları oluştulmuş şimdi projede çalışırkenki Web.config
dosyamıza gözatalım.
XML(Web.config)
1 2 3 4 5 6 7 8 9 | <?xml version="1.0" encoding="utf-8"?> <configuration> <connectionStrings> <add name="MyDB" providerName="System.Data.SqlClient" connectionString="Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;User ID=myDomainmyUsername;Password=myPassword;" /> </connectionStrings> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> </configuration> |
Buradaki connection string
bilgisinin benim makinama ait connection string bilgisi olduğunu düşünelim kimsenin sizin bilgilerinizi öğrenmesini istemezsiniz herhalde eğer makinanıza dış ip ile erişim sağlanıyorsa hiç istemezsiniz. yeri geliyor acil olarak projelerde değişiklik yapıp yayınlamanız gerekiyor bu aciliyette Web.config
dosyasından publish ettikten sonra ilgili alanları düzenlemek yada ekleme yapmanız gerekmektedir. işte burada sıkıntı olabiliyor kendi makinanıza ait bağlantı bilgilerini yanlışlıkla unuttuğunuzu düşünelim bu durumda sizin için bir risk doğuyor. Şimdi bu sorunu aşmak için projeyi Release
modda kaydettiğinizde yukarıdaki Web.config
dosyasında yer alan MyDB
adlı connection string bilgisini boş olarak yayınlanmasını sağyalayım.
Web.Release.config Transform
dosyasına giriş alttaki değişiklikleri yaptığınızda proje publish edildiğinde boş connection string bilgisi ile kaydedilecektir.
XML(Web.Release.config)
1 2 3 4 5 6 7 8 9 10 11 12 | <?xml version="1.0"?> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <connectionStrings> <add name="MyDB" connectionString="" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> </connectionStrings> <system.web> <compilation xdt:Transform="RemoveAttributes(debug)" /> </system.web> </configuration> |
Yukarıdaki kodda gördüğünüz gibi xdt:Transform
attribute’ünde yapılacak işlemi belirttiyoruz connection string etiketindeki xdt:Transform
attribute’ünde işlemin attirute değiştirmek olduğunu söylüyoruz. hangi attribute’ün değerişeceğinide xdt:Locator
etiketi ile söylüyoruz burada Match metoduna parametre olarak name değeri vermişiz buda şu demek oluyor name attribute’ündeki değer ile orjinal Web.config
dosyasındaki connection string etiketleri arasında name attirbute’ü ile eşleşen connection string bilgisini değiştir diyoruz.
Yukarıdaki kodda bir farklı xdt:Transform
attribute’ünüde compilation etiketinde görebilirsiniz buradaki etiketin amacıda compilation
etiketinden debug attribute’ü Release
modda publish edildiğinde silinmesini istemişiz.
Projeyi Relase modda publish ettiğinizde aşağıdaki gibi bir Web.config dosyası üretilecektir.
XML(Web.config)
1 2 3 4 5 6 7 8 9 | <?xml version="1.0" encoding="utf-8"?> <configuration> <connectionStrings> <add name="MyDB" providerName="System.Data.SqlClient" connectionString="" /> </connectionStrings> <system.web> <compilation targetFramework="4.0" /> </system.web> </configuration> |
Yukarıdaki Web.config dosyasına ait Release modda publish işleminden sonraki son halinde gördüğünüz gibi Web.Release.config dosyasında yaptığımız işlemler uygulanmış biz connection string bilgisi boş ve compilation etiketinden ise debug attribute’ünün kaldırılmasını istemiştik.
Web Transform Farklı Bazı İşlemler
Tüm Etiketleri Silme
Bu örneğimizde configuration > system.webServer etiketi altındaki rewrite etiketi etiketinin tümünü sileceğiz. Tümünü silmek istediğiniz etikete xdt:Transform=”RemoveAll” şeklinde bir tanımlama yaptığınızda tüm rewrite etiketleri silinecektir.
1 2 3 4 5 | <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <system.webServer> <rewrite xdt:Transform="RemoveAll" /> </system.webServer> </configuration> |
Tek Etiket Silme
Tek etiket silmek istediğinizde yukarıdakinden farklı olarak yapmanız gereken RemoveAll yerine Remove tanımı yapmanız ve tek silme olacağı için benzersiz bir etiket olan name ve benzeri attribute’ü kullanarak tekli silme işlemini gerçekleştirebilirsiniz.
1 2 3 4 5 | <configuration> <connectionStrings> <add name="ConnStr2" xdt:Transform="Remove" xdt:Locator="Match(name)" connectionString="" /> </connectionStrings> </configuration> |
Üstteki kodda xdt:Tranform’una tek silme gerçekleştireceğimiz için Remove tanımı yaptık ve hangi connectionStrings altındaki add etiketinin silineceğini ise xdt:Locator kısmında Match(name) yani name attribute’ü ile eşleşen add etiketi silinecektir.