ASP.NET Web Dağıtımı Visual Studio Kullanarak: Web.config Dosya Dönüştürmeleri

tarafından Tom Dykstra

Başlangıç Projesini İndir

Bu öğretici serisi, Visual Studio 2012 veya Visual Studio 2010 kullanarak ASP.NET web uygulamasını Azure Uygulaması Service Web Apps'e veya üçüncü taraf barındırma sağlayıcısına dağıtmayı (yayımlamayı) gösterir. Seri hakkında bilgi için serinin ilk dersine bakın.

Genel bakış

Bu öğreticide, Web.config dosyasını farklı hedef ortamlara dağıttığınızda değiştirme işlemini otomatikleştirme işlemi gösterilmektedir. Çoğu uygulamanın Web.config dosyasında, uygulama dağıtıldığında farklı olması gereken ayarları vardır. Bu değişiklikleri yapma işlemini otomatikleştirmek, her dağıttığınızda bunları el ile yapmak zorunda kalmanızı engeller; bu yorucu ve hataya açık olabilir.

Hatırlatma: Bir hata iletisi alırsanız veya öğreticiyi tamamlarken bir şeyin çalışmadığını fark ederseniz, sorun giderme sayfasını kontrol edin.

Web.config dönüştürmeleri ile Web Dağıtımı parametreleri karşılaştırması

Web.config dosya ayarlarını değiştirme işlemini otomatikleştirmenin iki yolu vardır: Web.config dönüştürmeleri ve Web Dağıtımı parametreleri. Web.config dönüştürme dosyası, dağıtıldığında Web.config dosyasının nasıl değiştirileceğini belirten XML işaretlemesi içerir. Belirli derleme yapılandırmaları ve belirli yayımlama profilleri için farklı değişiklikler belirtebilirsiniz. Varsayılan derleme yapılandırmaları Hata Ayıklama ve Yayın'dır ve özel derleme yapılandırmaları oluşturabilirsiniz. Yayımlama profili genellikle bir hedef ortama karşılık gelir. (Yayımlama profilleri hakkında daha fazla bilgi için IIS'ye Test Ortamı Olarak Dağıtma Öğreticide.)

Web Dağıtımı parametreleri, Web.config dosyalarında bulunan ayarlar da dahil olmak üzere dağıtım sırasında yapılandırılması gereken birçok farklı ayar türünü belirtmek için kullanılabilir. Web.config dosya değişikliklerini belirtmek için kullanıldığında, Web Dağıtımı parametrelerinin ayarlanması daha karmaşıktır, ancak dağıtana kadar ayarlanacak değeri bilmediğiniz durumlarda kullanışlıdır. Örneğin, kurumsal bir ortamda bir dağıtım paketi oluşturup üretimde yüklemesi için BT departmanındaki bir kişiye verebilirsiniz ve bu kişinin bilmediğiniz bağlantı dizesi veya parolaları girebilmesi gerekir.

Bu öğretici serisinin kapsadığı senaryo için, Web.config dosyasına yapılması gereken her şeyi önceden biliyorsunuz, bu nedenle Web Dağıtımı parametrelerini kullanmanız gerekmez. Kullanılan derleme yapılandırmasına bağlı olarak farklılık gösteren ve kullanılan yayımlama profiline bağlı olarak farklılık gösteren bazı dönüştürmeleri yapılandıracaksınız.

Azure'da Web.config ayarlarını belirtme

Değiştirmek istediğiniz Web.config dosyası ayarları <connectionStrings> veya <appSettings> öğesinde ise ve Azure App Service'te Web Apps'e dağıtım yapıyorsanız, dağıtım sırasında değişiklikleri otomatikleştirmek için başka bir seçeneğiniz vardır. Azure'da geçerlilik kazanmasını istediğiniz ayarları web uygulamanızın yönetim portalı sayfasının Yapılandır sekmesine girebilirsiniz (uygulama ayarları ve bağlantı dizesi bölümlerine kadar aşağı kaydırın). Projeyi dağıttığınızda, Azure değişiklikleri otomatik olarak uygular. Daha fazla bilgi için bkz . Windows Azure Web Siteleri: Uygulama Dizeleri ve Bağlantı Dizeleri Nasıl Çalışır?

Varsayılan dönüştürme dosyaları

Çözüm Gezgini'de Web.config'i genişleterek iki varsayılan derleme yapılandırması için varsayılan olarak oluşturulan Web.Debug.config ve Web.Release.config dönüştürme dosyalarını görüntüleyin.

Web.config_transform_files

Web.config dosyasına sağ tıklayıp bağlam menüsünden Yapılandırma Dönüşümleri Ekle'yi seçerek özel derleme yapılandırmaları için dönüştürme dosyaları oluşturabilirsiniz. Bu öğreticide bunu yapmanız gerekmez ve özel derleme yapılandırmaları oluşturmadığınız için menü seçeneği devre dışı bırakılır.

Daha sonra, her biri test, hazırlama ve üretim yayımlama profilleri için birer tane olacak şekilde üç dönüştürme dosyası daha oluşturacaksınız. Hedef ortama bağlı olan ve bu nedenle yayımlama profili dönüşüm dosyasında yönetmeniz gereken ayarların tipik bir örneği, test ve üretim ortamları için farklılık gösteren bir WCF uç noktasıdır. Yayımlama profillerini oluşturduktan sonra, sonraki eğitimlerde bu profillere uygun yayımlama profili dönüştürme dosyaları oluşturacaksınız.

Hata ayıklama modunu devre dışı bırakma

Hedef ortam yerine derleme yapılandırmasına bağlı olan bir ayara örnek olarak özniteliği verilmiştir debug . Yayın derlemesi için, dağıttığınız ortama bakılmaksızın genellikle hata ayıklamanın devre dışı bırakılmasını istersiniz. Bu nedenle, Visual Studio proje şablonları, varsayılan olarak bir öğeden bir özniteliği kaldıran kod içeren Web.Release.config dönüştürme dosyaları oluşturur. Varsayılan Web.Release.config şu şekildedir: Bazı örnek dönüştürme kodu yorum satırlarıyla verilmiştir, ayrıca compilation elementi debug özniteliğini kaldıran kod içerir.

<?xml version="1.0" encoding="utf-8"?>

<!-- For more information on using web.config transformation visit https://go.microsoft.com/fwlink/?LinkId=125889 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    In the example below, the "SetAttributes" transform will change the value of 
    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator 
    finds an attribute "name" that has a value of "MyDB".
    
    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <!--
      In the example below, the "Replace" transform will replace the entire 
      <customErrors> section of your web.config file.
      Note that because there is only one customErrors section under the 
      <system.web> node, there is no need to use the "xdt:Locator" attribute.
      
      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
</configuration>

xdt:Transform="RemoveAttributes(debug)" özniteliği, dağıtılan Web.config dosyasındaki system.web/compilation öğesinden debug özniteliğinin kaldırılmasını istediğinizi belirtir. Bu, her sürüm yapılandırmasını dağıttığınızda gerçekleştirilir.

Hata günlüğü erişimini yöneticilerle sınırlama

Uygulama çalışırken bir hata varsa, uygulama sistem tarafından oluşturulan hata sayfasının yerine genel bir hata sayfası görüntüler ve hata günlüğü ve raporlaması için Elmah NuGet paketini kullanır. customErrors Application Web.config dosyasındaki öğesi hata sayfasını belirtir:

<customErrors mode="RemoteOnly" defaultRedirect="~/GenericErrorPage.aspx">
  <error statusCode="404" redirect="~/GenericErrorPage.aspx" />
</customErrors>

Hata sayfasını görmek için öğesinin modecustomErrors özniteliğini geçici olarak "RemoteOnly" yerine "Açık" olarak değiştirin ve uygulamayı Visual Studio'dan çalıştırın. Studentsxxx.aspx gibi geçersiz bir URL isteyerek hataya neden olun. IIS tarafından oluşturulan "Kaynak bulunamıyor" hata sayfası yerine GenericErrorPage.aspx sayfasını görürsünüz.

Hata sayfası

Hata günlüğünü görmek için, bağlantı noktası numarasından sonra URL'deki her şeyi elmah.axd ile değiştirin (örneğin, http://localhost:51130/elmah.axd) ve Enter tuşuna basın:

ELMAH sayfası

İşiniz bittiğinde customErrors öğesini "RemoteOnly" moduna geri döndürmeyi unutmayın.

Geliştirme bilgisayarınızda, hata günlüğü sayfasına ücretsiz erişime izin vermek uygundur, ancak üretimde bu bir güvenlik riski oluşturur. Üretim sitesi için, hata günlüğü erişimini yöneticilere kısıtlayan bir yetkilendirme kuralı eklemek ve kısıtlamanın test ve hazırlamada da çalışmasını istediğinizden emin olmak istiyorsunuz. Bu nedenle bu, bir Yayın derlemesini her dağıttığınızda uygulamak istediğiniz başka bir değişikliktir ve bu nedenle Web.Release.config dosyasına aittir.

Web.Release.config dosyasını açın ve burada gösterildiği gibi kapanış location etiketinden hemen önce yeni configuration bir öğe ekleyin.

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    In the example below, the "SetAttributes" transform will change the value of 
    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator 
    finds an attribute "name" that has a value of "MyDB".
    
    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <!--
      In the example below, the "Replace" transform will replace the entire 
      <customErrors> section of your web.config file.
      Note that because there is only one customErrors section under the 
      <system.web> node, there is no need to use the "xdt:Locator" attribute.
      
      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
  <location path="elmah.axd" xdt:Transform="Insert">
    <system.web>
      <authorization>
        <allow roles="Administrator" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
</configuration>

Transform"Insert" özniteliği değeri, bu location öğenin Web.config dosyasındaki mevcut location öğelere eşdüzey olarak eklenmesine neden olur. (Bir location öğesi, Güncelleştirme Kredileri sayfası için zaten yetkilendirme kurallarını belirtiyor.)

Artık doğru kodladığınızdan emin olmak için dönüşümün önizlemesini görebilirsiniz.

Çözüm Gezgini'nde Web.Release.config dosyasına sağ tıklayın ve Dönüştürmeyi Önizle seçeneğine tıklayın.

Önizleme Dönüştürme menüsü

Sol tarafta geliştirme Web.config dosyasını ve sağ tarafta dağıtılan Web.config dosyasının nasıl görüneceğini, değişikliklerin vurgulanmış olarak gösteren bir sayfa açılır.

Hata ayıklama dönüşümünün önizlemesi

Web.config Önizlemesi, sol tarafta geliştirme dosyası ve sağ tarafta değişikliklerin vurgulandığı dağıtılmış dosyanın nasıl görüneceğini gösteren ekran görüntüsü.

Önizlemede, yazmadığınız bazı dönüşümlerle ilgili ek değişiklikler fark edebilirsiniz: Bu değişiklikler genellikle işlevselliği etkilemeyen boşlukların kaldırılmasıdır.

Dağıtımdan sonra siteyi test ettiğinizde, yetkilendirme kuralının etkili olduğunu doğrulamak için de test edersiniz.

Not

Güvenlik Notu Hiçbir zaman bir üretim uygulamasında hata ayrıntılarını herkese göstermeyin veya bu bilgileri ortak bir konumda depolamayın. Saldırganlar bir sitedeki güvenlik açıklarını bulmak için hata bilgilerini kullanabilir. ELMAH'yı kendi uygulamanızda kullanıyorsanız, güvenlik risklerini en aza indirmek için ELMAH'yı yapılandırın. Bu öğreticideki ELMAH örneği önerilen bir yapılandırma olarak kabul edilmemelidir. Uygulamanın içinde dosya oluşturabilmesi gereken bir klasörün nasıl işleneceğini göstermek için seçilen bir örnektir. Daha fazla bilgi için bkz . ELMAH uç noktasının güvenliğini sağlama.

Yayımlama profili dönüşüm dosyalarında ele alacağınız bir ayar

Yaygın bir senaryo, dağıttığınız her ortamda farklı olması gereken Web.config dosya ayarlarının olmasıdır. Örneğin, WCF hizmetini çağıran bir uygulamanın test ve üretim ortamlarında farklı bir uç noktaya ihtiyacı olabilir. Contoso University uygulaması da bu tür bir ayar içerir. Bu ayar, sitenin sayfalarında geliştirme, test veya üretim gibi hangi ortamda olduğunuzu belirten görünür bir göstergeyi denetler. Ayar değeri, uygulamanın Site.Ana ana sayfasındaki ana başlığa "(Geliştirme)" veya "(Test)" ekleyip eklemeyeceğini belirler:

Ortam göstergesi

Uygulama hazırlama veya üretimde çalışırken ortam göstergesi atlanır.

Contoso University web sayfaları, uygulamanın hangi ortamda çalıştığını belirlemek için Web.config dosyasında ayarlanan appSettingsbir değeri okur:

<appSettings>
    <add key="Environment" value="Dev" />
</appSettings>

Değer, test ortamında "Test" ve hazırlama ve üretim için "Prod" olmalıdır.

Bir dönüştürme dosyasındaki aşağıdaki kod bu dönüşümü uygular:

<appSettings>
    <add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>

xdt:Transform"SetAttributes" öznitelik değeri, bu dönüşümün amacının Web.config dosyasındaki mevcut bir öğenin öznitelik değerlerini değiştirmek olduğunu gösterir. xdt:Locator"Match(key)" öznitelik değeri, değiştirilecek öğenin özniteliği burada belirtilen öznitelikle eşleşen key öğe olduğunu key gösterir. öğesinin add diğer tek özniteliğidir valueve dağıtılan Web.config dosyasında değiştirilecek olan budur. Burada gösterilen kod, öğesinin value özniteliğinin EnvironmentappSettings dağıtılan Web.config dosyasında "Test" olarak ayarlanmasına neden olur.

Bu dönüşüm, henüz oluşturmadığınız yayımlama profili dönüştürme dosyalarına aittir. Test, hazırlama ve üretim ortamları için yayımlama profilleri oluşturduğunuzda bu değişikliği uygulayan dönüştürme dosyalarını oluşturacak ve güncelleştireceksiniz. Bunu IIS'e dağıtma ve üretime dağıtma öğreticilerinde yapacaksınız.

Not

Bu ayar <appSettings> öğesi içinde olduğundan, Azure App Service'deki Web Apps'e dağıtırken dönüşümü belirtmek için başka bir alternatife sahipsiniz. Bu konunun önceki bölümlerinde yer alan Azure'da Web.config ayarlarını belirtme kısmına bakın.

Bağlantı dizelerini ayarlama

Varsayılan dönüştürme dosyası bir bağlantı dizesi nasıl güncelleştirileceğini gösteren bir örnek içerse de, yayımlama profilinde bağlantı dizesi belirtebildiğiniz için çoğu durumda bağlantı dizesi dönüştürmeleri ayarlamanız gerekmez. Bunu IIS'e dağıtım ve üretime dağıtım öğreticilerinde yapacaksınız.

Özet

Yayımlama profillerini oluşturmadan önce Web.config dönüştürmeleri için yapabileceğiniz her şeyi yaptınız ve dağıtılan Web.config dosyasında neler olacağını önizlediniz.

Sol tarafta Özgün Web.config dosyasının olduğu Web.config Önizlemesini ve değişiklikler vurgulanmış şekilde Dönüştürülmüş Web.config dosyasının sağ tarafta nasıl görüneceğini gösteren ekran görüntüsü.

Aşağıdaki öğreticide, proje özelliklerini ayarlamayı gerektiren dağıtım kurulum görevleriyle ilgileneceksiniz.

Daha Fazla Bilgi

Bu öğretici kapsamındaki konular hakkında daha fazla bilgi için bkz . Visual Studio ve ASP.NET için Web Dağıtımı İçerik Haritası'nda dağıtım sırasında hedef Web.config dosyasında veya app.config dosyasındaki ayarları değiştirmek için Web.config dönüşümlerini kullanma.