.net - 如何确定不需要项目的哪些包引用?
问题描述
我有一个项目解决方案,可以构建。这些项目大多是旧样式(XML 格式)*.csproj
,而不是较新的 SDK 样式,并且项目引用 NuGet 包。
我相信一些包引用是不需要的或已经过时的,即:
- 包引用在
*.csproj
和/或中定义packages.config
- 但是不需要包引用,即项目的源代码不使用包,如果包被删除,项目仍然会构建
转换为 SDK 风格的项目格式时会出现问题——因为packages.config
(由 VS IDE 创建)包含项目的依赖项和子依赖项,但新的 SDK 风格的项目只需要定义其依赖项(而不是其子依赖项) .
如何找到不需要哪些包引用?
请假设:
- 我可以解析
*.csproj
和/或packages.config
,所以我知道所有包引用的列表——我不知道需要哪些引用 - 我只对项目直接依赖的包感兴趣,即我不想要在运行时需要但在构建时不需要的包,因为它们是依赖项的依赖项。
我不想进行实验——即“依次删除每个包引用,并尝试重新构建项目,以查看在构建时是否需要引用”——太耗时了。
我能想到的唯一算法是:
- 使用反射打开引用的包并获取定义的类型或命名空间列表
- 查看项目中是否使用了这些——通过在源代码中搜索命名空间字符串
你能建议一个更好的方法——更准确的方法,或者使用现有的工具吗?
解决方案
从 Visual Studio 2019 16.10 开始,有一个名为“删除未使用的引用”的功能,可以从项目文件中删除对其他项目和 nuget 包的引用。目前它处于预览状态,您需要启用它:转到Tools
> Options
> Text Editor
> C#
>Advanced
并选择Show “remove Unused References” command in Solution Explorer (experimental)
.
我敢肯定他们会把它移到功能的其他地方,因为它不仅适用于 C#,而且一般适用于 dotnet
推荐阅读
- docker - 在同一台服务器上扩展虚拟机/容器有什么意义?
- javascript - 我应该手动将 JS 异常发送到 Google Analytics 吗?
- python-3.x - 在python3中解码字节消息
- mysql - MySQL:复合索引与多个索引(最左边的索引前缀)
- c - C中函数调用约定的历史
- java - 没有为 MultipartFile 配置 Spring Boot 2.0.2 MultipartConfigElement
- javascript - 在 HTML 中将变量从 JavaScript 转换为 PHP?
- django - Django:无法在模板中显示来自抽象模型的数据
- java - 禁用时如何使 JCheckBox L&F 保持启用状态(true)?
- shell - 如何在没有 eval 的情况下将包括引号在内的参数字符串传递给命令