Web.Config Hata Ayıklama / Yayınlama


82

Visual Studio 2010'daki web.config'in veritabanlarından Hata Ayıklama modundan Yayın moduna geçme yeteneği sağladığını biliyorum.

İşte benim Web.Release.config'im:

<?xml version="1.0"?>

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

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

  <connectionStrings>
    <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
      providerName="System.Data.SqlClient" />
    <add name="Testing1" connectionString="Data Source=test;Initial Catalog=TestDatabase;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>

</configuration>

İşte Web.Debug.config kodum:

<?xml version="1.0"?>

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

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

  <connectionStrings>
    <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
      providerName="System.Data.SqlClient" />
    <add name="Live1" connectionString="Data Source=Live;Initial Catalog=LiveDatabase;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>

</configuration>

Ve bu benim Web.config kodum:

<?xml version="1.0"?>

<!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 -->
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />

    <authentication mode="Forms">
       <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
    </authentication>

    <membership>
       <providers>
          <clear/>
          <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
         enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
         applicationName="/" />
       </providers>
    </membership>

    <profile>
       <providers>
          <clear/>
          <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
       </providers>
    </profile>

    <roleManager enabled="false">
       <providers>
          <clear/>
          <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
    <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
       </providers>
    </roleManager>

  </system.web>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

Projemi yayınladığımda Web.config dosyamda hiçbir şey görünmüyor.it Canlı Veritabanı bağlantı dizimi göstermiyor mu?

Yanıtlar:


131

Visual Studio 2010'un parçası olan web.config dönüştürmeleri, geçerli web.config dosyasını .Debug veya .Release sürümüne "dönüştürmek" için XSLT kullanır.

.Debug / .Release dosyalarınızda, bağlantı dizesi alanlarınıza aşağıdaki parametreyi eklemeniz gerekir:

xdt:Transform="SetAttributes" xdt:Locator="Match(name)"

Bu, her bağlantı dizesi satırının eşleşen adı bulmasına ve öznitelikleri buna göre güncellemesine neden olacaktır.

Not: Değiştirilmedikleri için, dönüşüm dosyalarındaki providerName parametrenizi güncelleme konusunda endişelenmenize gerek yoktur.

İşte uygulamalarımdan birinden bir örnek. İşte web.config dosyası bölümü:

<connectionStrings>
      <add name="EAF" connectionString="[Test Connection String]" />
</connectionString>

Ve işte uygun dönüşümü yapan web.config.release bölümü:

<connectionStrings>
      <add name="EAF" connectionString="[Prod Connection String]"
           xdt:Transform="SetAttributes"
           xdt:Locator="Match(name)" />
</connectionStrings>

Eklenen bir not: Dönüşümler yalnızca siteyi yayınladığınızda gerçekleşir, sadece F5 veya CTRL + F5 ile çalıştırdığınızda değil. Yerel olarak belirli bir yapılandırmaya göre bir güncelleme çalıştırmanız gerekirse, bunun için Web.config dosyanızı manuel olarak değiştirmeniz gerekecektir.

Daha fazla ayrıntı için MSDN belgelerine bakabilirsiniz

https://msdn.microsoft.com/en-us/library/dd465326(VS.100).aspx


20
Bunun, cevaba F5 DEĞİL yayınlama zamanında gerçekleştiğine dair bir not ekleyebilir misiniz? Görünüşe göre bunu 2 saattir doğruydum ama fark etmedim.
Paul

Bunun Visual Studio Online Continuous Build ile çalışmasını nasıl sağlayabilirim? Derleme ve Azure'a dağıtım sırasında Web.Config'imi dönüştürmesini istiyorum.
Rosdi Kasım

1
@RosdiKasim - Bunun çevrimiçi Visual Studio için% 100 eşleşip eşleşmeyeceğinden emin değilim, ancak belirli bir projeyi dağıtmam gerektiğinde (birden çok projem varsa) veya farklı bir yapı kullanmam (ve dolayısıyla dönüştürmem) gerektiğinde her şeyi doğrudan Azure web sitesi örneği. İşte bir süre önce yazdığım bazı ayrıntılar: freshconsulting.com/…
Dillie-O

İşte bunu ayrıntılı olarak açıklayan MSDN bağlantısı msdn.microsoft.com/en-us/library/dd465326(VS.100).aspx
Hakan Fıstık

1
Siteyi VS'de F5 üzerinden çalıştırma ve yayınlama ile ilgili ek notunuz bana çok yardımcı oldu.
Denis M. Kitchen

8

ConfigTransformBir Nuget paketi olarak bulunan yapı hedefini kullanarak mümkündür - https://www.nuget.org/packages/CodeAssassin.ConfigTransform/

Tüm "web. * .Config" dönüşüm dosyaları dönüştürülecek ve seçilen yapı yapılandırmasına bakılmaksızın yapı çıktı dizininde bir dizi "web. *.

Aynısı, web dışı projelerdeki "app. *. Config" dönüştürme dosyaları için de geçerlidir.

ve ardından aşağıdaki hedefi *.csproj.

<Target Name="TransformActiveConfiguration" Condition="Exists('$(ProjectDir)/Web.$(Configuration).config')" BeforeTargets="Compile" >
    <TransformXml Source="$(ProjectDir)/Web.Config" Transform="$(ProjectDir)/Web.$(Configuration).config" Destination="$(TargetDir)/Web.config" />
</Target>

Konuyla ilgili olarak Google'da görünen ilk Stackoverflow gönderisi olduğu için bir yanıt göndermek.


Bu harika yöntem benim için olağanüstü çalıştı, ancak bahsettiğiniz ConfigTransform'u (her zaman tüm yapılandırmaları dönüştüren) yüklemem gerekmedi - yalnızca Visual Studio'da etkin derleme yapılandırmasını ayarladım (örneğin, hata ayıklamak için değiştirdim), çözümü oluşturdum ve voila!
BornToCode

5

Dönüşümün geliştirme aşamasında çalışmasını sağlamak için (F5 veya CTRL + F5 kullanarak ) paketler klasörüne (packages \ ConfigTransform \ ctt.exe) ctt.exe'yi ( https://ctt.codeplex.com/ ) bırakıyorum.

Sonra Visual Studio'da bir pre- veya post-build olayı kaydediyorum ...

$(SolutionDir)packages\ConfigTransform\ctt.exe source:"$(ProjectDir)connectionStrings.config" transform:"$(ProjectDir)connectionStrings.$(ConfigurationName).config" destination:"$(ProjectDir)connectionStrings.config"
$(SolutionDir)packages\ConfigTransform\ctt.exe source:"$(ProjectDir)web.config" transform:"$(ProjectDir)web.$(ConfigurationName).config" destination:"$(ProjectDir)web.config"

Dönüşümler için SlowCheeta VS uzantısını kullanıyorum ( https://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5 ).


1
Beyaz boşlukları korumak için (dönüştürülen yapılandırmanın tek satırda olmasını engeller) komut satırına koruma boşluğu girintisi IndentChars: "" ekleyin. $(SolutionDir)packages\ConfigTransform\ctt.exe source:"$(ProjectDir)connectionStrings.config" transform:"$(ProjectDir)connectionStrings.$(ConfigurationName).config" destination:"$(ProjectDir)connectionStrings.config" preservewhitespace indent IndentChars:" "
Emanuel Nilsson

3

Senin yerine yapacaksanız bağlantı dizeleri tüm üretim ortamı için haber olanlarla, sadece bu sözdizimini kullanarak üretim olanlarla tüm bağlantı dizeleri değiştirebilirsiniz:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

<connectionStrings xdt:Transform="Replace">
    <!-- production environment config --->
    <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
      providerName="System.Data.SqlClient" />
    <add name="Testing1" connectionString="Data Source=test;Initial Catalog=TestDatabase;Integrated Security=True"
      providerName="System.Data.SqlClient" />
</connectionStrings>
....

Bu cevaba ilişkin bilgiler bu cevaptan ve bu blog yazısından alınmıştır .

uyarı : Başkalarının daha önce açıkladığı gibi, bu ayar yalnızca uygulama çalıştırırken / hata ayıklarken yayınlamadığında (F5'e basarak) geçerli olacaktır.

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.