2017-01-11 2 views
0

Je suis perdu. J'ai un projet Web qui vient avec un fichier de configuration et plusieurs paramètres qui doivent être définis différemment par environnement cible. J'ai un paramètre d'application et une chaîne de connexion. Les valeurs DEFINE doivent être remplacées.Le paramétrage de Web.config échoue pour l'un des nombreux paramètres du déploiement de l'application Azure

Web.config:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <appSettings> 
     <add key="HostUri" value="DEFINE"/> 
     ... 
    </appSettings> 
    <connectionStrings> 
     <add name="DbConn" connectionString="DEFINE" providerName="System.Data.SqlClient"/> 
    </connectionStrings> 
    ... 
</configuration> 

J'ai une spécification de paramètre une tâche de service App Azure déploiement utilise plus tard au cours du déploiement. Ici, j'ai spécifié les deux valeurs à remplacer.

parameters.xml:

<parameters> 
    <parameter name="HostUri" defaultValue="Replace me!"> 
    <parameterEntry kind="XmlFile" scope="Web.config" 
     match="/configuration/appSettings/add[@key='HostUri']/@value" /> 
</parameter> 

<parameter name="DbConn" defaultValue="Replace me!"> 
    <parameterEntry kind="XmlFile" scope="Web.config" 
     match="/configuration/connectionStrings/add[@name='DbConn']/@connectionString" /> 
    </parameter> 
</parameters> 

Alors que l'application mise en HostUri est remplacé correctement, la chaîne de connexion DbConn séjours intacte. Je n'ai même pas la valeur par défaut. Il conserve sa valeur DEFINE telle que définie à l'origine dans Web.config.

Mon instinct me dit que mon XPath /configuration/connectionStrings/add[@name='DbConn']/@connectionString est incorrect, mais il me semble correct et suit ce que d'autres messages ont fait, tels que Cobus Bernard.

Toute aide est grandement appréciée.

Répondre

0

j'ai étudié les fichiers journaux et a constaté que MSBuild traite les chaînes de connexion différemment:

... 
Adding declared parameter 'HostUri'. 
Adding declared parameter 'DbConn'. 
Adding declared parameter 'DbConn-Web.config Connection String'. 
... 

La dernière ligne a conduit à une entrée non désirée dans le fichier généré SetParameters.xml:

... 
<setParameter name="HostUri" value="Replace me!" /> 
<setParameter name="DbConn" value="Replace me!" /> 
<setParameter name="DbConn-Web.config Connection String" value="DEFINE" /> 
... 

Donc, mon XPath était correct, mais cette directive spéciale a mis un DEFINE dans mon Web.config cible. J'ai trouvé deux solutions à ce, principalement sur cette question SO: How to Publish Web with msbuild?

1) Tweak votre fichier de projet

Décharger vous de projet Web, éditer le fichier de projet et ajouter dans la configuration désirée la ligne suivante:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <!-- Add this line: -- 
    <AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings> 
    ... 
</PropertyGroup> 

Le processus de construction reprendra ce traitement et arrête les chaînes de connexion spéciale.

Je trouve cette solution trop cachée et les gens oublieront si l'alternative est un peu plus explicite:

2) Configurer MSBuild

passer un argument explicite à MSBuild lorsque le paquet de libération se construit:

msbuild /P:Configuration=Release;AutoParameterizationWebConfigConnectionStrings=false;...