在我们的团队中,我们在Visual Studio 2008中有一个由Team Foundation Server进行源代码控制的数据库项目。每两周左右,在一位同事签入后,项目文件将不会加载到其他开发人员计算机上。错误消息是:Visual Studio 2008项目文件因为意外的编码更改而无法加载
项目文件无法加载。根级别的数据无效。 1号线,位置1
当我看到在记事本项目文件++,这个文件看起来是这样的:
��<NUL?NULxNULmNULlNUL NULvNULeNULrNULsNULiNULoNULnNUL
...
等(你可以在此看到<?xml version
) 而一个正常的项目文件看起来像:
<?xml version="1.0" encoding="utf-16"?>
...
所以大概什么是错与ENC编码文件。这对我们来说是一个问题,因为它不可能再次获得正确的文件编码。 '解决方案'是扔掉项目文件,从源代码管理中获取最新的工作版本。
根据该文件,编码应该是UTF-16。根据记事本++,损坏的文件实际上是UTF-8。
我的问题是:
- 为什么Visual Studio中搞乱了编码 项目文件, 显然在随机时间,并在 随机计算机?
- 我们该怎么做才能防止这种情况?
- 当它发生时,是否有 恢复当前 文件的正确编码,而不是 拉动 源代码控制的旧版本?
作为最后一个提示:问题是一个单独的项目文件,所有其他项目文件不公开此问题。
更新:感谢Jon Skeet的建议,我对第三个问题有了答案。 当我用两个字节FF FE替换前9个字节EF BB BF BF BF BD EF BF BD时,项目文件将再次加载。
这仍然是Visual Studio破坏文件的原因。
如果您在破损文件和工作文件之间进行二进制比较,您会看到什么?我不知道这是否是一个UTF-16排序问题。 – 2010-03-23 10:14:08
如果我做了一个二进制比较,结果证明这些文件是indentical,除了正确的一个在开始时有两个额外的字节FF FE,并且已损坏的一个有额外的九个字节EF BB BF EF BF BF BD BF BD。 – Xenan 2010-03-23 10:38:58