Corriger le cas du « ReplacableToken_ » obtenu dans une transformation de web.config

Aujourd’hui, dans le cadre d’un de mes projets professionnels, nous avons décidé de mettre en place des fichiers de config pour chaque environnement. Je crée donc chaque fichier web.config avec les transformations adéquates et déploie mes fichiers en Dev Intégré puis compile le tout. Dès lors que je commence à effectuer mes premiers tests, j’obtiens inexplicablement l’erreur suivante : « Format of the initialization string does not conform to specification starting at index 0″.

Après quelques recherches sur Google, je commence à déboguer et me rend compte que la chaîne de connexion récupérée n’a rien à voir avec celle que je m’attends à recevoir. Au lieu de recevoir quelque chose du genre :

<connectionStrings>
    <add name="MyFile" 
connectionString="connection string='Data Source=toto;Initial Catalog=MyDB;Persist Security Info=True;User ID=MyUser;Password=a'" 
         providerName="System.Data.EntityClient" xdt:Transform="Replace" xdt:Locator="Match(name)"/>
</connectionStrings>

Je me retrouve avec :

<connectionStrings>
    <add name="MyFile" connectionString="connection string='$(ReplacableToken_MyFile-Web.config Connection String_0)'" 
         providerName="System.Data.EntityClient" xdt:Transform="Replace" xdt:Locator="Match(name)"/>
</connectionStrings>

Bizarre hein ? Une nouvelle recherche sur Google sur « ReplecableToken_ » m’a fait atterrir sur ce lien (cf. la partie ASP.NET Web Application: Publish/Package Tokenizing Parameters) assez explicite sur la question : Les chaînes de connexion sont tokenizés afin de ne pas exécuter d’opérations SQL sur d’autres serveurs que ceux que vous avez configurés. Etant donné que nous créons un package susceptible d’être déployé sur plusieurs environnements, les valeurs des web.config ne sont pas reprises. Mais je vous laisse le soin de lire le chapitre dédié à ce sujet dans le lien que je vous ai filé.

Pour en revenir à mon problème, il existe 2 méthodes permettant de le corriger :
- Editer le .csproj
- Créer un fichier {ProjectName}.wpp.targets ({ProjectName} étant le nom du projet).

J’ai opté pour la première option en ajoutant les lignes suivantes :

<PropertyGroup>
    <AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>
</PropertyGroup>
Pour marque-pages : permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>