Aracılığıyla paylaş


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

tarafından Tom Dykstra

Başlangıç Projelerini İndir

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

Genel Bakış

Bu öğreticide, Web.config dosyasını farklı hedef ortamlara dağıtırken değiştirme işlemini nasıl otomatikleştirdiğiniz gösterilir. Ç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.

Anımsatıcı: Öğreticide ilerlerken bir hata iletisi alırsanız veya bir şey çalışmıyorsa sorun giderme sayfasını kontrol edin.

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

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. ( Test Ortamı Olarak IIS'ye Dağıtma öğreticisinde profilleri yayımlama hakkında daha fazla bilgi edineceksiniz.)

Web Dağıtımı parametreleri, Web.config dosyalarında bulunan ayarlar 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 bunu üretime yüklemek üzere BT departmanındaki bir kişiye verebilirsiniz ve bu kişinin bilmediğiniz bağlantı dizelerini 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 dosya ayarları veya <appSettings> öğesindeyse <connectionStrings> ve Azure App Service'da Web Apps dağıtı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 etkili olmasını istediğiniz ayarları web uygulamanızın yönetim portalı sayfasının Yapılandır sekmesine girebilirsiniz ( uygulama ayarları ve bağlantı dizeleri 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'da, varsayılan iki 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örmek içinWeb.configgenişletin.

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 öğretici için bunu yapmanız gerekmez ve menü seçeneği devre dışıdır çünkü özel derleme yapılandırmaları oluşturmadınız.

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ı olduğundan yayımlama profili dönüştürme dosyasında işleyecek bir ayarın tipik bir örneği, test ve üretim için farklı olan bir WCF uç noktasıdır. Birlikte çalıştıkları yayımlama profillerini oluşturduktan sonra sonraki öğreticilerde 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ğımlı olan bir ayara örnek olarak özniteliği gösterilir 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 öğesinden compilation özniteliğini kaldıran debug kodla Web.Release.configdönüştürme dosyaları oluşturur. Varsayılan Web.Release.config: Açıklama satırı yapılan bazı örnek dönüştürme koduna ek olarak özniteliğini kaldıran debug öğesinde compilation 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>

özniteliği, xdt:Transform="RemoveAttributes(debug)" özniteliğin debug dağıtılan Web.config dosyasındaki öğesinden system.web/compilation kaldırılmasını istediğinizi belirtir. Bu, yayın derlemesi 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 Uygulama 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. Studentsx.aspx gibi geçersiz bir URL isteyerek hataya neden olur. 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 öğeyi customErrors "RemoteOnly" moduna geri döndürmeyi unutmayın.

Geliştirme bilgisayarınızda hata günlüğü sayfasına ücretsiz erişim izni vermek uygundur, ancak üretimde bu bir güvenlik riski oluşturur. Üretim sitesi için, hata günlüğü erişimini yöneticilerle 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, 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 açın ve burada gösterildiği gibi kapanış configuration etiketinden hemen önce yeni location 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. (Kredileri Güncelleştir sayfası için yetkilendirme kurallarını belirten bir location öğe zaten var.)

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

Çözüm Gezgini'daWeb.Release.config sağ tıklayın ve Dönüştürmeyi Önizle'ye tıklayın.

Dönüştürmeyi Önizle menüsü

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

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

Sol tarafta geliştirme dosyasının olduğu Web.config Önizlemesini ve değişikliklerin vurgulandığı sağ tarafta dağıtılan dosyanın nasıl görüneceğini gösteren ekran görüntüsü.

( Önizlemede, dönüştürme yazmadığınız bazı ek değişiklikler fark edebilirsiniz: bunlar genellikle işlevselliği etkilemeyen boşlukların kaldırılmasını içerir.)

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

Not

Güvenlik Notu Bir üretim uygulamasında hata ayrıntılarını asla genel olarak görüntülemeyin veya bu bilgileri ortak bir konumda depolamayın. Saldırganlar bir sitedeki güvenlik açıklarını keşfetmek için hata bilgilerini kullanabilir. KENDI uygulamanızda ELMAH kullanıyorsanız, güvenlik risklerini en aza indirmek için ELMAH'yi yapılandırın. Bu öğreticideki ELMAH örneği önerilen bir yapılandırma olarak kabul edilmemelidir. Bu, uygulamanın içinde dosya oluşturabilmesi gereken bir klasörün nasıl işlendiğini göstermek için seçilmiş bir örnektir. Daha fazla bilgi için bkz. ELMAH uç noktasının güvenliğini sağlama.

Profil dönüştürme dosyalarını yayımlamada işleyecek olduğunuz ayar

Yaygın bir senaryo, dağıttığınız her ortamda farklı olması gereken Web.config dosya ayarlarına sahip olmaktı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.Master ana sayfasındaki ana başlığa "(Geliştirme)" veya "(Test)" ekleyip eklemeyeceğini belirler:

Ortam göstergesi

Uygulama hazırlama veya üretim aşamasında çalışırken ortam göstergesi atlanır.

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

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

Değer, test ortamında "Test" ve hazırlama ve üretim için "Üretim" 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 key eşleşen öğ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 profillerini oluştururken bu değişikliği uygulayan dönüştürme dosyalarını oluşturacak ve güncelleştireceksiniz. Bunu IIS'ye dağıtma ve üretime dağıtma öğreticilerinde yapacaksınız.

Not

Bu ayar öğesinde olduğundan, Azure App Service'da <appSettings> Web Apps dağıtırken dönüştürmeyi belirtmek için başka bir alternatife sahipsiniz Azure App Service Bu konunun başlarındaki Azure'da Web.config ayarlarını belirtme bölümüne bakın.

Bağlantı dizelerini ayarlama

Varsayılan dönüştürme dosyası bir bağlantı dizesinin nasıl güncelleştirileceğini gösteren bir örnek içerse de, çoğu durumda bağlantı dizesi dönüştürmelerini ayarlamanız gerekmez, çünkü yayımlama profilinde bağlantı dizelerini belirtebilirsiniz. Bunu IIS'ye dağıtma ve üretime dağıtma öğreticilerinde yapacaksınız.

Özet

Artık yayımlama profillerini oluşturmadan önce Web.config dönüştürmelerle mümkün olduğunca çok şey yaptınız ve dağıtılan Web.config dosyasında neler olacağının önizlemesini gördünüz.

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ğda 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örevlerini gerçekleştireceksiniz.

Daha Fazla Bilgi

Bu öğreticinin kapsamındaki konular hakkında daha fazla bilgi için bkz. Visual Studio ve ASP.NET için Web Dağıtımı İçerik Eşlemesi'nde 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üştürmeleri kullanma .