本文来告诉大家一个黑科技,通过 .suo 文件读取 VisualStudio 的启动项目。在 sln 项目里面,都会生成对应的 suo 文件,这个文件是 OLE 格式的文件,文件的格式没有公开,本文的方法适合用在 VisualStudio 2019 上,对于其他版本的 VisualStudio 也许会不适合
感谢 Simon Cropp 大佬提供的方法
默认在 sln 解决方案文件的相同文件夹里面,将会存放 .vs\{解决方案名}\v{VS版本}\.suo
文件,如解决方案文件名为 HairhechallchujurKairbilairlem.sln
在 VisualStudio 2019 下将会存放 .vs\HairhechallchujurKairbilairlem\v16\.suo
文件
这个 .suo
文件是包含了 VisualStudio 解决方案的一些配置,如启动项目。关多关于此文件,请参阅 Solution User Options (.Suo) File 文档
预计这个 suo 格式文件基本不会更改,在 1995 年的时候就开始使用这个格式
读取 .suo 需要使用到 Open MCDF 库。这是一个完全由 C# 实现的读取 OLE 格式文档的库,我在做 OFFICE 组件也用到这个库
在 suo 文件里面,通过 SolutionConfiguration 内容存放当前的启动项,这里面的内容是使用 UTF-16 编码的字符串,读取的方法如下
这里的 text 的内容大概如下
通过读取 StartupProject 后续的内容即可找到当前的启动项目的 GUID 值,以下是我写的正则
上面代码拿到的 guid 就是启动项目的 guid 内容
咱可以采用 Simon Cropp 大佬的开源项目 https://github.com/SimonCropp/SetStartupProjects 来辅助读取当前 sln 里面包含的 csproj 的 GUID 和路径
代码如下
通过 guid 获取当前的 csproj 项目文件路径方法如下
我封装了方法,传入的是 sln 文件,返回启动项目的路径
需要先在项目安装 SetStartupProjects 库,才能使用这个方法
本文所有代码放在 github 和 gitee 欢迎小伙伴访问
除了读取启动项目,还可以读取断点等内容,读取 suo 里面的所有内容的方法如下
当然了,获取到的内容不一定使用 UTF-16 编码格式,还需要自己尝试,里面的数据只是二进制而已,上面代码的转换字符串只是用来调试
更多请看
SimonCropp/SetStartupProjects: Setting Visual Studio startup projects by hacking the suo
Solution User Options (.Suo) File
更多编译相关请看手把手教你写 Roslyn 修改编译
原文链接: http://blog.lindexi.com/post/dotnet-Roslyn-%E9%80%9A%E8%BF%87%E8%AF%BB%E5%8F%96-suo-%E6%96%87%E4%BB%B6%E8%8E%B7%E5%8F%96%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E7%9A%84%E5%90%AF%E5%8A%A8%E9%A1%B9%E7%9B%AE
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 林德熙 (包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我 联系。