其实 sln 文件不是由 VS 2005 或者 VS 2008 直接打开的, 而是由 Microsoft Visual Studio Version Selector (VSLauncher.exe) 打开的, VS Launcher 会根据 sln 文件内容的不同选择由 VS 2005 还是 VS 2008 打开.其中, VS 2005 的 sln 文件会有如下的标识:Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005而 VS 2008 的 sln 有如下的标识:Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008
Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005果真有
# Visual Studio 2005而 VS 2008 的 sln 有如下的标识:Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
# Visual Studio 2005果真有
找个文本编辑器打开sln 文件,
如果文件编码是 U8 的,
你会看到第一行是个空行,
如果文件是 ascii 编码的, 会没有空行将有空行的, 删除空行, 没有空行的, 添加空行, 保存, 再到资源管理器看看, 那个数字没有了.有此推断, 某个 shell 扩展, 读取了指定长度的字节来判断的版本信息,是哪个shell 扩展呢, 是不是禁用它会好些?下回分解.
LZ顺序搞错了,应该是先读取sln文件看标识(2005/2008),然后再根据标识进行打开操作
应该就是为了跳过 BOM, 图标是由 VSFileHandler.dll 控制的, 可能这个 DLL 只能读 ANSI 的文档, 所以 Visual Studio 故意在 sln 前面留了一个空行.