title author date CreateTime categories
VisualStudio 解决方案筛选器 slnf 文件
lindexi
2019-11-29 08:41:13 +0800
2019-04-07 10:58:41 +0800
VisualStudio

在 VisualStudio 2019 发布的时候,有一个强大的功能是不加载项目打开提升性能,此时可以用到解决方案筛选器 slnf 文件。这个文件将会带来很大的性能提升。本文将会详细告诉大家这个文件的格式以及带来的好处

在上古时代,我有一个大项目,这个大项目里面有很多单元测试和呆魔,我每次打开这个项目的时候都需要等半天。

于是想到的解决方法是创建两个 sln 文件,一个是作为核心的项目,另一个是核心项目加上测试和呆魔,如果只是需要开发,那么就打开核心的项目。如果是需要同时进行测试什么的,就可以打开另一个带单元测试的项目。

但是这样玩存在一个坑就是小伙伴只是在一个项目添加了新的项目,但是忘了在另一个项目里面添加,于是就会发现发布的版本和实际开发的版本的功能不相同。如果是核心的项目还好,编译不通过,如果是扩展就只有在测试的时候才发现没有这个功能。

于是我就被拉出去了,好在我的小伙伴 walterlv 大大用了这个科技 VS 编译太慢了吗?新建解决方案配置关闭一部分项目的编译 这样就可以提升编译的速度,在编译的时候会忽略测试或呆魔等

但是 walterlv 还没解决我的问题,我在打开工程的时候,还是需要等待 VisualStudio 加载单元测试项目,还是需要等很久。

好在 VisualStudio 2019 有了解决方案筛选器这个功能,这个功能是如何玩的?

在 VisualStudio 2019 新的欢迎界面,有了不加载项目的选择,于是就可以不加载项目打开

这时打开的项目都是不加载的,虽然打开很快,但是我需要手动加载我需要使用的项目。如果每个小伙伴都需要这样手动加载,估计我又会被拉出去

在 VisualStudio 2019 可以在第一次手动加载需要的项目之后保存解决方案筛选器 slnf 文件,当然不需要每个项目都点击重新加载,定义指定一个高层的项目,右击点击加载依赖项目,于是所有被他依赖的项目都会加载

下次小伙伴直接打开 slnf 文件的时候就可以看到只有我上次加载的项目,其他的项目默认是隐藏的

如果小伙伴忽然需要某个项目,可以右击显示隐藏的项目

那么使用 slnf 文件有什么好处?

上面说到的,可以加载只需要的项目,于是打开项目的速度很快。同时支持显示隐藏的项目,在大多数的开发都可以使用自己需要的项目,但是在临时需要其他项目的时候也可以右击加载。

那么对比多个 sln 文件的好处就是,多个 sln 可能有小伙伴忘记在多个项目添加项目,而 slnf 文件是依赖于指定的 sln 文件,所以只需要往 sln 或 slnf 里面添加一次项目就可以了。

如我在 sln 项目里面添加了呆魔项目,那么我只需要点击全保存,更新 sln 文件,然后在到 slnf 项目里面就可以看到提示项目已经修改,是否重新加载。点击重新就在就可以看到刚才加入的呆魔项目了。

反过来,如果我在 slnf 项目里面添加一个项目,在点击保存的时候也会在 sln 项目提示重新加载此时就可以看到添加的项目

那么这是如何做到的,下面告诉大家 slnf 的项目文件格式,这是一个 Json 文件,这个 Json 文件里面记录了依赖的 sln 文件和需要过滤打开的项目的相对路径,如我的一个 slnf 文件就是这样

{
"solution": {
"path": "VisualStudio2019.sln",
"projects": [
"VisualStudio2019\\VisualStudio2019.csproj"
]
}
}

这个 slnf 文件依赖于 VisualStudio2019.sln 文件,于是所有的添加项目或移除项目实际上是对 VisualStudio2019.sln 文件进行添加或移除项目,不会修改 slnf 文件,于是就可以同步修改一次,不会因为有多个项目忘记添加

同时记录了需要加载的项目的相对路径,这样就可以在启动的时候只加载需要的项目而不需要去读取分析 sln 文件,只有在右击显示隐藏的项目的时候才读取分析 sln 文件找到其他的项目

通过 slnf 文件可以加载只需要的项目,同时解决多个 sln 文件添加项目的同步问题,提升了项目文件打开的性能和编译性能

更多的新功能请看 VisualStudio 2019 新特性

Load a subset of projects - Visual Studio

2019-11-29-VisualStudio-解决方案筛选器-slnf-文件的更多相关文章

  1. 2019.11.29 SAP SMTP郵件服務器配置 發送端 QQ郵箱

    今天群裏的小夥伴問了如何配置郵件的問題,隨自己在sap裏面配置了一個 1.    RZ10配置參數 a)       参数配置前,先导入激活版本 执行完毕后返回 b)      输入参数文件DEFAU ...

  2. 2018.11.29 Struts2中拦截器的学习&项目的实际运用

    struts2官方架构 拦截器的创建 第一种方式 第二种方式 看源码AbstractInterceptor 底层已经帮我们写过这些方法了 第三种方式(推荐) 拦截器API学习 放行 前后处理 不放行, ...

  3. 2019.11.29 Mysql的数据操作

    为名为name的表增加数据(插入所有字段) insert into name values(1,‘张三’,‘男’,20); 为名为name的表增加数据(插入部分字段) insert into name ...

  4. pycharm+anaconda在Mac上的配置方法 2019.11.29

    内心os: 听人说,写blog是加分项,那他就不是浪费时间的事儿了呗 毕竟自己菜还是留下来东西来自己欣赏吧 Mac小电脑上进行python数据开发环境的配置 首先下载Anaconda,一个超好用的数据 ...

  5. Supervision meeting notes 2019/11/29

    topic 分支:  1. subgraph/subsequence mining Wang Jin, routine behavior/ motif. Philippe Fournier Viger ...

  6. 2019-4-7-VisualStudio-解决方案筛选器-slnf-文件

    title author date CreateTime categories VisualStudio 解决方案筛选器 slnf 文件 lindexi 2019-04-07 11:34:59 +08 ...

  7. 创建、导入、导出、复制以及粘贴 WMI 筛选器

    TechNet 库 Deployment Forefront Identity and Access Management 基础结构优化 浏览器 Microsoft Dynamics Products ...

  8. EOJ Monthly 2019.11 E. 数学题(莫比乌斯反演+杜教筛+拉格朗日插值)

    传送门 题意: 统计\(k\)元组个数\((a_1,a_2,\cdots,a_n),1\leq a_i\leq n\)使得\(gcd(a_1,a_2,\cdots,a_k,n)=1\). 定义\(f( ...

  9. 一个或多个筛选器或者Listeners启动失败 的问题探索以及解决方案

    2020年10月9日更新 经过本人对SSM框架理解的加深和对IDEA工具使用的熟悉,现提出一种新的解决办法,以前的解决办法可能存在问题 1. 问题描述: 使用IDEA作为开发工具,使用Maven作为项 ...

随机推荐

  1. CopyOnWriteArrayList使用

    1.在遍历操作数量大大超过可变操作是(add,set等等)使用.原因是其可变操作是通过对底层数据进行一次新的复制来实现的. 2.迭代器创建后,其不会反应列表的添加.移除或更改.其迭代器是”快照“风格的 ...

  2. Python学习笔记:外部数据的输入、存储等操作

    查看current工作路径: >>> import os >>> os.getcwd() 'D:\\python' 更改工作路径: >>> os. ...

  3. DAY 5模拟赛

    DAY 5 廖俊豪神仙出题 T1 最小差异矩阵(a.cpp, a.in, a.out) [题目描述] 有一个 n*m 的矩阵,矩阵的每个位置上可以放置一个数.对于第 i 行,第 i 行的差异定义为该行 ...

  4. docker-compose部署redis-cluster

    node1-node6 1.到http://download.redis.io/redis-stable/redis.conf下载官方redis.conf文件 2.修改对应端口 # bind 127. ...

  5. 转 Cookie、Session

    https://www.cnblogs.com/liwenzhou/p/8343243.html Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况 ...

  6. 如何数冲突域(collision domains)个数

    数冲突域的核心是: switch.bridge的每个端口都是一个冲突域(因为它们有存储转发功能) hub的所有端口在同一冲突域内(因为hub本身是模拟导线,各个端口可以看成接在一起) 对下图而言 共有 ...

  7. [Flask]jinja2模板-宏的使用

    定义宏: macros.html <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  8. netfilter/iptables 防火墙

    目录 文章目录 目录 iptables 与 netfilter 工作机制 规则(Rules) 链(chain) 表(tables) 网络数据包通过 iptables 的过程 总结链.表和规则的关系 i ...

  9. Python_List对象内置方法详解

    目录 目录 前言 软件环境 列表List 修改列表的元素 插入列表元素 extend 将序列中的元素迭代的附加到list中 insert 在指定的索引号中插入一个元素 删除列表元素 del 删除Lis ...

  10. Python学习笔记:MySQL数据库连接和使用

    一.安装pymysql插件 直接在pycharm中安装即可. 二.使用 1.数据库插入操作 insert 注意: insert语句需要提交,使用commit() 如果报错,需要回滚.使用rollbac ...