44 votes

Transformation Web.config : Attribut non reconnu 'xmlns:xdt'. Notez que les noms d'attributs sont sensibles à la casse

J'obtiens cet étrange bug intermittent dans un projet MVC 3.0 Lorsque je construis le projet, j'obtiens parfois le message d'erreur suivant :

Attribut non reconnu 'xmlns:xdt'. Notez que les noms d'attributs sont sensibles à la casse.

Il s'agit du fichier de transformation standard web.config (Web.Release.config copié ci-dessous). Il n'y a pas d'autres erreurs ou avertissements. Cela se produit en mode débogage et en mode release. Parfois, il disparaît si je nettoie la solution

BEGIN UPDATE

J'ai trouvé le problème. Dans le fichier du projet MVC (MyProject.csproj), j'avais réglé les vues de construction sur true.

<MvcBuildViews>true</MvcBuildViews>

Une fois remis en place faux l'erreur ci-dessus disparaît. J'aimerais que la vue soit construite car cela évite beaucoup d'erreurs de code de vue stupides, etc. et améliore les performances (les pages sont précompilées au lieu de jit).

Quelqu'un sait-il ce qui cause l'erreur ? Est-ce un bug ?

FIN UPDATE

<?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">
  <!--
    In the example below, the "SetAttributes" transform will change the value of 
    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator 
    finds an atrribute "name" that has a value of "MyDB".

    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <!--
      In the example below, the "Replace" transform will replace the entire 
      <customErrors> section of your Web.config file.
      Note that because there is only one customErrors section under the 
      <system.web> node, there is no need to use the "xdt:Locator" attribute.

      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
</configuration>

78voto

BrianHT Points 631

J'ai rencontré le même problème. Vous trouverez de nombreux articles sur les MvcBuildViews et les différentes conditions d'erreur. Mais aucune ne semble mentionner cette erreur particulière. Une solution rapide qui a fonctionné pour moi a été de supprimer le contenu du répertoire "obj" pour le projet web affecté, puis de reconstruire.

31voto

Andre Calil Points 5437

Il s'agit d'une sorte de solution de rechange, mais vous pouvez ajouter la ligne suivante à votre fichier pré-construction des commandes :

del $(ProjectDir)obj\* /F /S /Q

Cliquez à droite sur votre projet > Propriétés > Build Events > Pre-build

10voto

Flynn Points 484

Cela fonctionne avec l'intégration continue et WebDeploy :

Ce problème survient au moment où je règle

<MvcBuildViews>true</MvcBuildViews>

dans mon fichier de projet, que je besoin de à faire.

Après avoir lu et testé tout ce que j'ai trouvé sur ce problème, j'ai trouvé une solution qui fonctionne également avec WebDeploy via MSBuild.

MSBUild.exe ... /p:DeployOnBuild=true

Vous devez (seulement) supprimer le sous-dossier TransformWebConfig dans votre dossier de construction pendant les événements pré-ET post-construction. Cela fonctionne même avec les serveurs d'intégration continue qui s'arrêtent si aucun dossier n'existe.

Ligne de commande de l'événement de pré-construction :

if exist "$(ProjectDir)obj\$(ConfigurationName)\transformwebconfig\" del "$(ProjectDir)obj\$(ConfigurationName)\transformwebconfig\*" /F /S /Q

Ligne de commande de l'événement post-construction :

if exist "$(ProjectDir)obj\$(ConfigurationName)\transformwebconfig\" del "$(ProjectDir)obj\$(ConfigurationName)\transformwebconfig\*" /F /S /Q

Cela fonctionne même avec Resharper qui sera parfois confondu, si vous supprimez l'ensemble de la section obj dossier.

Veillez à définir le Run the post-build event à always ! !

UPDATE : Remplacement de debug et release par $(ConfigurationName) et suppression de la ligne dupliquée résultante

0voto

PhilW Points 330

J'ai trouvé que cela fonctionne mieux pour moi :

del "$(ProjectDir)obj\*" /F /Q
del "$(ProjectDir)obj\$(ConfigurationName)\AspnetCompileMerge\*" /F /S /Q
del "$(ProjectDir)obj\$(ConfigurationName)\CSAutoParameterize\*" /F /S /Q
del "$(ProjectDir)obj\$(ConfigurationName)\Package\*" /F /S /Q
del "$(ProjectDir)obj\$(ConfigurationName)\ProfileTransformWebConfig\*" /F /S /Q
del "$(ProjectDir)obj\$(ConfigurationName)\TempPE\*" /F /S /Q
del "$(ProjectDir)obj\$(ConfigurationName)\TransformWebConfig\*" /F /S /Q

autrement la ou les constructions se plaignent edmxResourcesToEmbed qui disparaissent.

0voto

Job Points 9

il suffit de supprimer l'attirubte xmlns:xdt du web.config, mais de le conserver dans web.release.config et web.debug.config

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X