【发布时间】:2011-01-30 17:38:19
【问题描述】:
在我们的团队中,我们在 Visual Studio 2008 中有一个数据库项目,该项目由 Team Foundation Server 进行源代码控制。每两周左右,在一位同事签入后,项目文件将不会加载到其他开发人员的机器上。错误信息是:
无法加载项目文件。根级别的数据无效。第 1 行,位置 1。
当我在 Notepad++ 中查看项目文件时,文件如下所示:
��<NUL?NULxNULmNULlNUL NULvNULeNULrNULsNULiNULoNULnNUL ...
等等(你可以在这个看到<?xml version)
而一个普通的项目文件看起来像:
<?xml version="1.0" encoding="utf-16"?> ...
所以文件的编码可能有问题。这对我们来说是个问题,因为事实证明不可能再次正确编码文件。 “解决方案”是丢弃项目文件,从源代码管理中获取最新的工作版本。
根据文件,编码应该是UTF-16。根据 Notepad++,损坏的文件实际上是 UTF-8。
我的问题是:
- 为什么 Visual Studio 会搞乱 项目文件, 显然是在随机时间和 随机机器?
- 我们应该怎么做才能防止这种情况发生?
- 当它发生时,是否有 恢复当前的可能性 以正确的编码文件代替 从拉旧版本 源代码控制?
最后一点:问题出在一个项目文件上,所有其他项目文件都不会暴露这个问题。
更新:感谢 Jon Skeet 的建议,我知道了第三个问题的答案。 当我将前九个字节 EF BB BF EF BF BD EF BF BD 替换为两个字节 FF FE 时,项目文件将再次加载。
这仍然是 Visual Studio 损坏文件的问题。
【问题讨论】:
-
如果您在损坏的文件和工作文件之间进行二进制差异,您会看到什么?我想知道这是否是 UTF-16 字节序问题。
-
如果我做一个二进制差异然后结果证明文件是相同的,除了正确的文件在开头有两个额外的字节,FF FE,而损坏的文件有九个额外的字节 EF BB BF EF BF BD EF BF BD。
标签: visual-studio-2008 encoding project-files