11

J'ai fait une web.config (full file, il ne montre pas des erreurs XML)Publier ne transforme pas web.config?

<?xml version="1.0"?> 
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 
    <configSections> 
     ... 
     <location path="." inheritInChildApplications="false"> 
     <connectionStrings> 
      <add name="ElmahLog" connectionString="data source=~/App_Data/Error.db" /> 
      <add name="database" connectionString="w" providerName="System.Data.EntityClient"/> 
     </connectionStrings> 
     </location> 
    ... 

avec un fichier de transformation (web.Staging.config)

<?xml version="1.0"?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <connectionStrings> 
    <add name="database" 
     connectionString="c" 
     providerName="System.Data.EntityClient" 
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)" /> 
    </connectionStrings> 
    <system.web> 
    <compilation xdt:Transform="RemoveAttributes(debug)" /> 
    <customErrors defaultRedirect="error.aspx" 
     mode="RemoteOnly" xdt:Transform="Replace"> 
    </customErrors> 
    </system.web> 
</configuration> 

Je publie en mode Staging (site web clic droit > Publier> Méthode: Système de fichiers ...)

------ Build started: Project: Drawing, Configuration: Staging Any CPU ------ 
    Drawing -> D:\Project\bin\Staging\Drawing.dll 
------ Build started: Project: MySystem, Configuration: Staging Any CPU ------ 
    MySystem -> D:\Project\bin\Staging\MySystem.dll 
... 

Mais quand je regarde le web.config dans le dossier de sortie, il n'est pas changé.

J'ai trouvé ce qui suit sur le journal de la construction:

D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration' 
D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration' 
D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration' 
Transformed web.config using Web.Staging.config into obj\Staging\TransformWebConfig\transformed\web.config. 

Quel pourrait être le problème? Est-ce que je fais ça bien?

+0

lorsque vous publiez, est-ce qu'il est construit pour 'staging' ou' release'? – Jimmy

+0

@Jimmy comme le dit le log, il compile dans 'Staging'. Il existe un fichier de transformation pour 'Release', mais cela ne fonctionne pas non plus. – BrunoLM

+0

Voyez-vous un message indiquant qu'il effectue la transformation? Comme le mien dit: "Transformé Web.config en utilisant Web.Beta.config dans obj \ Beta \ TransformWebConfig \ transformé \ Web.config." – CodingGorilla

Répondre

16

J'ai découvert deux choses:

  • Vous ne pouvez pas définir un espace de noms sur l'étiquette <configuration> (ex: pour <location path="." inheritInChildApplications="false">)
  • Vous devez surveiller la hiérarchie correcte dans le fichier de transformation.

Comme

<configuration> 
    <location> 
    <connectionStrings> 

Au lieu de

<configuration> 
    <connectionStrings> 
+0

En ce qui concerne xmlns: en fait, vous pouvez l'utiliser, mais vous devez également l'ajouter à la balise racine de la transformation. Sans xmlns cela fonctionne, mais VS ne reconnaît pas l'attribut 'inheritInChildApplications'. – amartynov

0

Ne pas oublier de copier tous les autres attributs de "configuration" de la "web.config" d'origine, car il semble que VS2012 ne le fait pas automatiquement et bien sûr il n'y aura pas de correspondance ...

+3

Ce n'est pas vrai. Vous pouvez spécifier uniquement les attributs qui changent et demander à la transformation de mettre à jour les attributs uniquement (ne pas remplacer l'élément): '' –

14

Répondre en retard, mais peut-être que je peux sauver quelqu'un un mal de tête. Dans Visual Studio 2013, il existe deux emplacements pour sélectionner la configuration pour votre build et votre déploiement. Le Gestionnaire de configuration, puis de nouveau avec Publier Web où la troisième étape de l'Assistant intitulée Paramètres vous permet de sélectionner la configuration que vous souhaitez utiliser. Si vous ne sélectionnez pas votre nouvelle configuration, elle utilisera la transformation pour la configuration sélectionnée au lieu de la vôtre.

+3

Vous m'avez en effet sauvé un mal de tête. – izb

+1

Ceci est la vraie réponse. –

0

Répondre en retard également, mais cela peut aider quelqu'un.

Je me suis rendu compte que si vous avez deux sites Web dans la même solution, lorsque vous essayez de publier l'un d'entre eux, la transformation peut ne pas fonctionner si vous avez une seule configuration pour les deux projets.

Un de mes sites Web était toujours en train de se transformer, mais l'autre était parfois et ne l'était pas toujours. Par exemple, j'avais la configuration "Auto" dans la solution, et j'avais web.config pour les deux sites Web. J'ai résolu cela en créant une nouvelle configuration avec un nom différent - "AutoAdmin" - créant aussi son fichier web.AutoAdmin.config pour le second projet, et quand je l'ai publié à nouveau la transformation s'est finalement produite.

2

Assurez-vous que dans les propriétés du Web.Le fichier de configuration Build Action est défini sur Content.

Si l'action de construction est définie sur None, elle ne sera pas transformée, même si elle est copiée dans le répertoire de sortie.

Questions connexes