机器中有vs05的项目,也有vs08的项目,但他们的 解决方案文件都是 *.sln。我一直认为Windows是按照扩展名来判断文件类型并指定打开方式的,但机器 vs05和vs08 共存 ,双击 sln文件居然可以智能识别打开方式。请问这是什么原理,我们自己想写软件达到这种效果应如何实现?

解决方案 »

  1.   

    其实 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
      

  2.   

    Microsoft Visual Studio Solution File, Format Version 9.00
    # Visual Studio 2005果真有
      

  3.   

    可是只有当文件打开时,才能读到里面的信息,难道有一个除vs之外的程序,先判断再使用哪个版本的vs?
      

  4.   

    sln文件是个xml文件里边有各种配置,也标明了是哪个vs创建的
      

  5.   

    (我的笔记摘录>对于 sln 文件, 在 windows 资源管理器里头, 图标上会有个数字,2005 的 sln 带着一个 8, 这个 8 是怎么来的?我们先去掉它看看,
    找个文本编辑器打开sln 文件,
    如果文件编码是 U8 的,
    你会看到第一行是个空行,
    如果文件是 ascii 编码的, 会没有空行将有空行的, 删除空行, 没有空行的, 添加空行, 保存, 再到资源管理器看看, 那个数字没有了.有此推断, 某个 shell 扩展, 读取了指定长度的字节来判断的版本信息,是哪个shell 扩展呢, 是不是禁用它会好些?下回分解.
      

  6.   

    空行的目的或许是为了跳过 BOM 头?
      

  7.   

    sln文件里面有标识,进行判断
      

  8.   


    LZ顺序搞错了,应该是先读取sln文件看标识(2005/2008),然后再根据标识进行打开操作
      

  9.   

    sln文件中有标识vs工具版本信息
      

  10.   


    应该就是为了跳过 BOM, 图标是由 VSFileHandler.dll 控制的, 可能这个 DLL 只能读 ANSI 的文档, 所以 Visual Studio 故意在 sln 前面留了一个空行.
      

  11.   

    求教:我机器上同时装了vs08和vs05,但是VS08的sln显示的是8,如何将其改为9?
      

  12.   

    我想直接把sln关联到我的2008怎么弄啊!现在我的sln就是个空白图标,不显示是谁啊!TOT