web-dev-qa-db-fra.com

Web.Config Debug / Release

Je sais que web.config dans Visual Studio 2010 offre la possibilité de passer du mode débogage au mode publication des bases de données.

Voici mon Web.Release.config:

<?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>

Voici mon code Web.Debug.config:

<?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>

Et ceci est mon code Web.config:

<?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>

Lorsque je publie mon projet, rien ne s'affiche dans mon fichier Web.config.it La chaîne de connexion à la base de données Live n'est-elle pas affichée?

75
RG-3

Les transformations web.config faisant partie de Visual Studio 2010 utilisent XSLT afin de "transformer" le fichier web.config actuel en sa version .Debug ou .Release.

Dans vos fichiers .Debug/.Release, vous devez ajouter le paramètre suivant dans les champs de votre chaîne de connexion:

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

Ainsi, chaque ligne de la chaîne de connexion trouvera le nom correspondant et mettra à jour les attributs en conséquence.

Remarque: vous n'aurez pas à vous soucier de la mise à jour de votre paramètre providerName dans les fichiers de transformation, car ils ne changent pas.

Voici un exemple d'une de mes applications. Voici la section du fichier web.config:

<connectionStrings>
      <add name="EAF" connectionString="Data Source=NTSQLT\S2K5TST;Initial Catalog=HR;User ID=EAFApp;Password=XXXX" providerName="System.Data.SqlClient" />
</connectionString>

Et voici la section web.config.release effectuant la transformation appropriée:

<connectionStrings>
      <add name="EAF" connectionString="Data Source=NTSQLP\S2K5TST;Initial Catalog=HR;User ID=EAFApp;Password=YYYY" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</connectionStrings>

Remarque ajoutée: les transformations ne se produisent que lorsque vous publiez le site, et non lorsque vous l'exécutez simplement avec F5 ou CTRL + F5. Si vous devez exécuter une mise à jour localement pour une configuration donnée, vous devrez modifier manuellement votre fichier Web.config pour cela.

Pour plus de détails, vous pouvez voir la documentation MSDN

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

125
Dillie-O

Il est possible d'utiliser la cible de construction ConfigTransform disponible sous la forme d'un paquet Nuget - https://www.nuget.org/packages/CodeAssassin.ConfigTransform/

Tous les fichiers de transformation "web. *" . Config "seront transformés et générés sous la forme d'une série de fichiers" web. *. Config.transformed "dans la construction répertoire de sortie quelle que soit la configuration de construction choisie.

Il en va de même pour "app. *. Config" transformer des fichiers dans des projets non Web.

puis en ajoutant la cible suivante à votre *.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>

Publier une réponse car il s'agit du premier message Stackoverflow publié dans Google sur le sujet.

8
Dennis

Pour que la transformation fonctionne en développement (avec F5 ou CTRL + F5), déposez le fichier ctt.exe ( https://ctt.codeplex.com/ ) dans le dossier packages (packages\ConfigTransform\ctt. EXE).

Ensuite, j'enregistre un événement pré ou post-build dans Visual Studio ...

$(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"

J'utilise l'extension SlowCheeta VS pour les transformations ( https://visualstudiogallery.msdn.Microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5 ).

5
Emanuel Nilsson

Si vous allez remplacer toutes les chaînes de connexion par des nouvelles pour l'environnement de production, vous pouvez simplement remplacer toutes les chaînes. Les chaînes de connexion avec les chaînes de production utilisant cette syntaxe:

<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>
....

Les informations pour cette réponse proviennent de cette réponse et cet article de blog .

notice : Comme d'autres l'ont déjà expliqué, ce paramètre ne s'appliquera que lorsque l'application ne sera pas publiée lors de son exécution/son débogage (en appuyant sur F5).

2
VSB