2012-07-02 2 views
3

J'ai créé des modèles T4 pour les fichiers de configuration de mes projets Web et Windows. Je peux générer avec succès maître web.config, et toutes les configs pour d'autres environnements, c.-à-web.ci.config, etc..However, je ne pouvais pas me débarrasser des erreurs sur mes fichiers tt maîtres, tels que:Modèle T4 contenant des résultats XML dans des erreurs d'analyse

  • Le caractère '#', valeur hexadécimale 0x23 est illégal dans un nom XML.
  • Le caractère '<', valeur hexadécimale 0x3c est illégal dans les valeurs d'attribut XML.
  • Déclaration XML inattendue. La déclaration XML doit être le premier nœud du document et aucun caractère d'espace blanc n'est autorisé à apparaître avant.

je manquerai un schéma XML ou une référence, mais quoi?


Mon fichier ressemble:

<#@ template debug="true" hostSpecific="true" #> 
<#@ output extension= ".config" #> 
<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
... 
    <add key="FileUploadFolder" value="<#= this.FileUpload #>" /> 
... 
</configuration> 
<#+ 
    string FileUpload="\\\\server\\folder"; 
#> 

Et voici screenshot

+0

Je pense que le problème pourrait être qu'un fichier .tt est analysé au format XML, et se confondre par votre contenu XML. Pas d'intérêt - que se passe-t-il si vous définissez l'extension de sortie à '.xml'? –

+0

Oui, probablement, mais tous les exemples de captures d'écran que je vois sur le net sont sans erreur [le soulignement rouge]. Lorsque je définis sur '.xml', il crée exactement le même document [et attendu] que pour la sortie' .config'. – demokritos

+0

Semble être une copie de [Visual Studio 2012 T4 templates générer des erreurs XML] (http://stackoverflow.com/q/12259217/1380680), qui a une réponse acceptée. –

Répondre

0

Ce qui se passe ici est que le service linguistique Xml VS identifie par erreur votre fichier T4 en tant que fichier Xml, donc crachant beaucoup de faux messages d'erreur positifs.

Je cherche à savoir s'il existe une solution pour le forcer à ignorer les fichiers T4. Si vous pouviez enregistrer un bug sur Microsoft Connect, ce serait utile.

+1

Vérifiez ma réponse pour la solution de contournement que j'ai utilisée - pourrait vous faire gagner du temps. –

+0

Oui, la solution de contournement de Reinier semble être la meilleure disponible actuellement. – GarethJ

5

Même problème ici. Je CONTOURNÉS en remplaçant dans le fichier .tt la ligne

<?xml version="1.0" encoding="utf-8"?> 

avec

<# WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); #> 

Une fois que VS est confus au sujet du format XML du fichier de modèle, il semble persister dans cette confusion - même après l'édition comme ci-dessus et un redémarrage. Le seul moyen de contourner cela semble être de supprimer le fichier existant .tt de votre projet et de le recréer à partir de rien.

Avec cette modification, le fichier .tt ne possède plus de balise <?xml?> et VS ne le considère donc pas comme un fichier XML. Il ignore tout à l'intérieur de la chaîne littérale. Votre modèle tout ressemble maintenant à ceci:

<#@ template debug="true" hostSpecific="true" #> 
<#@ output extension= ".config" #> 
<# WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); #> 
<configuration> 
... 
    <add key="FileUploadFolder" value="<#= this.FileUpload #>" /> 
... 
</configuration> 
<#+ 
    string FileUpload="\\\\server\\folder"; 
#> 
+0

Non, ça n'a pas marché. Mon problème n'est pas avec la sortie, le fichier de configuration est généré parfaitement.Le problème est quand j'ouvre le fichier tt dans VS IDE, à partir de la première ligne, il commence à souligner les caractères – demokritos

+0

J'ai ajouté la [capture d'écran] (http://continuousdevelopment.files.wordpress.com/2012/07/web- tt.png) – demokritos

+1

La capture d'écran que vous avez ajoutée n'affiche pas la modification que j'ai suggérée. La troisième ligne doit être remplacée par le <<# Writeline ... #> 'comme indiqué ci-dessus. N'oubliez pas d'essayer ceci de toutes pièces, avec un nouveau fichier '.tt', sinon VS reste confus. –

Questions connexes