在我们的团队中,我们在 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 的建议,我有了第三个问题的答案。当我用两个字节 FF FE 替换前九个字节 EF BB BF EF BF BD EF BF BD 时,项目文件将再次加载。
这仍然是 Visual Studio 损坏文件的问题。