架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 20461|回复: 2

[资料] .NET 获取不到完整的引用 Assembly 程序集

[复制链接]
发表于 2020-8-22 10:41:02 | 显示全部楼层 |阅读模式
使用.NET获取加载的程序集不完整,我们虽然引用了其他类库,但是在没有调用的情况下,是无法在加载的程序集里面获取到的,本文分享在WinForm和ASP.NET中获取到完整的Assembly程序集。

引言

使用.NET获取加载的程序集不完整,我们虽然引用了其他类库,但是在没有调用的情况下,是无法在加载的程序集里面获取到的,本文分享在WinForm和ASP.NET中获取到完整的Assembly程序集。

ASP.NET (未测)

.NET Framework推迟将程序集加载到当前的AppDomain中,直到需要它们为止。例如,如果仅从SomeMethod()调用第三方库,则通常在第一次运行SomeMethod()之前不会加载第三方DLL。

AppDomain.GetAssemblies()为您提供了所有已经加载到当前AppDomain中的程序集。BuildManager.GetReferencedAssemblies()返回从Web.config和其他位置引用的所有程序集的列表,并将这些程序集加载到当前的AppDomain中。

代码:



WinForm

首先使用下面代码获取加载的程序集。



获取到 Assembly 程序集的数量为12个,如下图:

89fd3cfe-8bf0-4307-85d4-6b6416aabc67.jpg

当不调用其他类库的方法的时候,主应用程序并不会加载其dll,估计也是为了节省性能开销,这样导致,我们第一次调用其他类库的方法的时候,可能稍慢一些。

使用修改后的代码,如下:



b8335ee2-27c6-4815-9fc4-7cbc5b63752c.jpg

获取到的 Assembly 程序集数量是117个 ,原理是获取应用程序目录下面的dll,然后进行加载。

这时,在调用 AppDomain.CurrentDomain.GetAssemblies().ToList() 方法的时候,就可以获取到完整的程序集了,可能会大于117个哦。

获取当前程序集





上一篇:.NET 使用 Redis 缓存之过期通知
下一篇:ServiceNow 云端IT业务的专业管理工具
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2020-12-25 15:50:46 | 显示全部楼层
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-9-22 20:39:35 | 显示全部楼层
学习学习。。。。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-27 01:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表