IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual Studio Discussion :

[VS2010]Problème transformation web.config et OneClick deploiement


Sujet :

Visual Studio

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 65
    Points : 49
    Points
    49
    Par défaut [VS2010]Problème transformation web.config et OneClick deploiement
    Bonjour a tous,

    Suite a l'article : la sur le déploiement dans VS2010 et ses commentaires, je vous expose mon pblm :

    J'ai fait une Web App ultra simple sous VS2010, celle-ci contient la configuration debug et la configuration release...

    Quand j'utilise le One-Click publishing de ma Web Application vers le serveur "localhost", le fichier Web.config qui est déployé n'est pas celui correctement transformé...

    Web.config de base, il est défini sans "connectionstrings":

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?xml version="1.0"?>
    <configuration>
     
        <configSections>
          <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
              <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
              <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
                <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
                <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
                <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
              </sectionGroup>
            </sectionGroup>
          </sectionGroup>
        </configSections>  
     
        <appSettings />  
        <connectionStrings>
        </connectionStrings>
        <system.web>
            <compilation debug="true">
     
              <assemblies>
                <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
              </assemblies>
     
            </compilation>
            <!--
                La section <authentication> permet de configurer 
            le mode d'authentification de la sécurité utilisé par 
            ASP.NET pour identifier un utilisateur entrant. 
            -->
            <authentication mode="Windows" />
     
    .....
     
    </configuration>

    le Web.config de la configuration "release" :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?xml version="1.0"?>
     
    <!-- Pour plus d'informations sur l'utilisation de la transformation web.config, consultez http://go.microsoft.com/fwlink/?LinkId=125889 -->
     
    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
      <!--
        Dans l'exemple ci-dessous, la transformation "SetAttributes" changera la valeur de 
        "connectionString" afin d'utiliser "ReleaseSQLServer" uniquement lorsque le localisateur "Match" 
        trouve un attribut "name" qui a une valeur "MyDB".
     
        <connectionStrings>
          <add name="MyDB" 
            connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
            xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
        </connectionStrings>
      -->
      <connectionStrings>
        <add xdt:Transform="Insert"
             name="MyEntities" connectionString="metadata=res://*/Data.csdl|res://*/Data.ssdl|res://*/Data.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost\sqlexpress;Initial Catalog=MaDb;User ID=releaseUser;Password=releasePassword;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>
      <system.web>
        <compilation xdt:Transform="RemoveAttributes(debug)" />
        <!--
          Dans l'exemple ci-dessous, la transformation "Replace" remplacera toute 
          la section <customErrors> de votre fichier web.config.
          Dans la mesure où il n'y a qu'une section customErrors sous le 
          nœud <system.web>, il n'est pas nécessaire d'utiliser l'attribut "xdt:Locator".
     
          <customErrors defaultRedirect="GenericError.htm"
            mode="RemoteOnly" xdt:Transform="Replace">
            <error statusCode="500" redirect="InternalError.htm"/>
          </customErrors>
        -->
      </system.web>
    </configuration>


    Quand je génère le package de deploiement, sous VS2010, dans le repertoire "\obj\Release\TransformWebConfig\transformed\" de mon projet, le fichier "Web.config" est le bon (connectionstring insérée, et attribut debug enlevé) :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?xml version="1.0"?>
    <configuration>
    
        <configSections>
          <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
              <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
              <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
                <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
                <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
                <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
              </sectionGroup>
            </sectionGroup>
          </sectionGroup>
        </configSections>  
    
        <appSettings/>  
        <connectionStrings>
            <add name="MyEntities"
                connectionString="metadata=res://*/Data.csdl|res://*/Data.ssdl|res://*/Data.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost\sqlexpress;Initial Catalog=MaDb;User ID=releaseUser;Password=releasePassword;MultipleActiveResultSets=True&quot;"
                providerName="System.Data.EntityClient"/>
        </connectionStrings>
        <system.web>
            <compilation>
    
              <assemblies>
                <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
              </assemblies>
    
            </compilation>
            .......
    
    </configuration>


    Cependant, lorsque je fais un OneClick deploy, le fichier qui est placé dans mon repertoire IIS est celui la :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?xml version="1.0"?>
    <configuration>
    
        <configSections>
          <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
              <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
              <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
                <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
                <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
                <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
              </sectionGroup>
            </sectionGroup>
          </sectionGroup>
        </configSections>  
    
        <appSettings/>  
        <connectionStrings>
            <add name="MyEntities"
                connectionString="{% token='$(ReplacableToken_#(parameter)_#(tokennumber))' xpathlocator='name' parameter='MyEntities-Web.config Connection String' description='MyEntities Chaîne de connexion utilisée dans web.config par l'application pour accéder à la base de données.' defaultValue='metadata=res://*/Data.csdl|res://*/Data.ssdl|res://*/Data.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost\sqlexpress;Initial Catalog=MaDb;User ID=releaseUser;Password=releasePassword;MultipleActiveResultSets=True&quot;' tags='SqlConnectionString' %}"
                providerName="System.Data.EntityClient"/>
        </connectionStrings>
        <system.web>
            <compilation>
    
              <assemblies>
                <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
              </assemblies>
    
            </compilation>
    .........
    
    </configuration>

    Forcement, cela ne convient pas... J'ai remarqué que ce fichier correspondait en fait a celui contenu dans le répertoire :
    "\obj\Release\CSAutoParameterize\transformed\web.config" de mon projet...


    Quel est le problème ?

    Merce d'avance pour toute aide...

    PS : je joins une archive du projet VS2010
    Fichiers attachés Fichiers attachés

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 15
    Points : 16
    Points
    16
    Par défaut Elément de solution
    Bonjour,

    j'ai effectivement le même problème, et après avoir cherché longuement, je n'ai trouvé aucune solution logique...

    J'ai donc essayé de contourner le problème en forçant l'application à utiliser la bonne chaine de connexion.

    Il faut modifier le fichier de définition de l'Entity dans le <Monmodele>.designer.cs, afin que le constructeur le plus simple (celui sans paramètre) utilise le constructeur de son parent "ObjectContext ("metadata.......", "<monmodel>).

    Concrètement le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public MonEntity() : base ("name=MonEntity", "MonEntity")
    .....
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public MonEntity() : base ("metadata=.......", "MonEntity")
    Cette méthode a pour but d'empêcher l'application d'utiliser la chaine de connexion du Web.config, qui semble être reformattée - et mal reformattée en ce qui concerne notre problème - par je ne sais quel process à chaque publication.

    Si quelqu'un en sait plus sur ce reformattage, je suis preneur...

    a++

  3. #3
    Membre confirmé Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Points : 577
    Points
    577
    Par défaut Solution
    Bonjour,

    Je suis tombé sur votre messages en cherchant le pourquoi du comment de cette transformation.
    Ici vous trouverez toutes les réponses :
    http://sedodream.com/2010/11/11/ASPN...arameters.aspx]

    Sinon pour faire vite voici la solution :
    Modifier le fichier du projet (avec un éditeur XML) pour désactiver la transformation supplémentaires des chaines de connexion :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <PropertyGroup>  
     
    <AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>
     
    </PropertyGroup>

  4. #4
    Membre confirmé Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Points : 577
    Points
    577
    Par défaut Une vraie solution
    Bon j'ai creusé un peu ce problème, il semble que ce soir les ressources "fr" du processus de transformation du web.config pas MsBuild qui a un problème.
    Ainsi j'ai modifié le nom du répertoire "fr" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\fr
    Pour qu'il ne retrouve plus les ressources spécifique au français, et après cela marche... un accent ou une apostrophe de trop et c'est le drame...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] probléme de web.config
    Par loucia dans le forum ASP.NET
    Réponses: 1
    Dernier message: 04/09/2011, 15h36
  2. Problème identification web.config VB
    Par papy_taupe dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 20/01/2011, 15h10
  3. Probléme fichier web config
    Par MacHouss dans le forum IIS
    Réponses: 0
    Dernier message: 21/07/2010, 14h15
  4. problème fichier web.config
    Par yoyo88 dans le forum Développement Web avec .NET
    Réponses: 9
    Dernier message: 25/03/2010, 09h24
  5. Réponses: 5
    Dernier message: 08/01/2008, 22h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo