Dans notre équipe, nous avons un projet de base de données dans Visual Studio 2008 qui est sous le contrôle de la source par Team Foundation Server. Toutes les deux semaines environ, après qu'un collaborateur se soit enregistré, le fichier de projet ne sera pas chargé sur les autres machines de développement. Le message d'erreur est:Le fichier du projet Visual Studio 2008 ne se charge pas en raison d'un changement de codage inattendu
Le fichier de projet n'a pas pu être chargé. Les données au niveau racine sont incorrectes. Ligne 1, 1.
Quand je regarde le fichier de projet dans Notepad ++, le fichier ressemble à ceci:
��<NUL?NULxNULmNULlNUL NULvNULeNULrNULsNULiNULoNULnNUL
...
et ainsi de suite (vous pouvez voir dans ce <?xml version
) alors qu'un fichier de projet normale ressemble à:
<?xml version="1.0" encoding="utf-16"?>
...
donc probablement quelque chose qui ne va pas avec le enc oding du fichier. C'est un problème pour nous car il s'avère impossible d'obtenir à nouveau l'encodage correct. La 'solution' consiste à jeter le fichier projet et à obtenir la dernière version de travail du contrôle source. Selon le fichier, le codage doit être UTF-16. Selon Notepad ++, le fichier corrompu est en fait UTF-8.
Mes questions sont les suivantes:
- Pourquoi Visual Studio Messing l'encodage du fichier de projet , apparemment à des moments aléatoires et à machines aléatoires?
- Que devons-nous faire pour éviter cela?
- Quand il est arrivé, est-il une possibilité pour restaurer le fichier en cours dans le codage correct à la place de tirer une ancienne version de contrôle de code source?
En note: le problème concerne un seul fichier projet, tous les autres fichiers projet n'exposent pas ce problème. MISE À JOUR: Grâce à la suggestion de Jon Skeet, j'ai la réponse à la question numéro trois. Lorsque je remplace les neuf premiers octets EF BB BF EF BF BD EF BF BD par les deux octets FF FE, le fichier de projet se charge à nouveau. Cela laisse toujours la question de savoir pourquoi Visual Studio corrompt le fichier.
Que voyez-vous si vous faites un diff binaire entre les fichiers cassés et de travail? Je me demande si c'est un problème d'endianness UTF-16. –
Si je fais un binaire diff alors il s'avère que les fichiers sont identiques sauf que le bon a deux octets supplémentaires au début, FF FE, et le corrompu avait neuf octets supplémentaires EF BB BF EF BF BD EF BF BD. – Xenan