惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
S
Securelist
MyScale Blog
MyScale Blog
Jina AI
Jina AI
罗磊的独立博客
The Cloudflare Blog
美团技术团队
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
雷峰网
雷峰网
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
博客园 - 聂微东
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
T
Tailwind CSS Blog
Attack and Defense Labs
Attack and Defense Labs
博客园_首页
Latest news
Latest news
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Hacker News
The Hacker News
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
U
Unit 42
D
Docker
Webroot Blog
Webroot Blog
N
Netflix TechBlog - Medium
T
Tor Project blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Last Watchdog
The Last Watchdog
B
Blog
Recent Announcements
Recent Announcements
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Security Latest
Security Latest
V2EX - 技术
V2EX - 技术
N
News | PayPal Newsroom
Microsoft Security Blog
Microsoft Security Blog

博客园 - 匡匡

Vue 父子组件通信方式 Vue: 组件扩展 WebClient 指定出口 IP IIS8 下 JS, CSS 等静态文件出现 500 错误 使用 ffmpeg 转换 mov 视频 使用 ildasm 和 ilasm 修改程序集的的引用信息 2020-01-08 工作日记:无题 .Net Core 程序集管理说明(加载) ASP.NET 后台 COOKIE 的设置 使用 sql server 默认跟踪分析执行的 SQL 语句 Nginx深入详解之upstream分配方式 使用 HttpWebRequest 类做 POST 请求没有应反 webpack 里的 import, exports 实现原理 使用 pdf.js 查看发票时,显示不了台头和印章的解决办法 Flex 布局里 input 宽度最小 150px 的问题, 浏览器 BUG? 使用像素单位设置 EXCEL 列宽或行高 sweetalert 快速显示两个提示, 第二个显示不出的问题 加权轮询和加权随机算法 在 Docker 中部署 ASP.NET CORE 应用
.NET CORE 动态加载 DLL 的问题
匡匡 · 2019-12-06 · via 博客园 - 匡匡

有个系统, 需要适应不同类型的数据库(同时只使用其中一种),如果把数据库操作层提取出来,然后针对不同的数据库使用不同的 DLL, 再根据不同的项目使用不同的库, 在以前的 ASP.NET 中, 直接把相关的 DLL 复制到 BIN 目录就可以了, .NET CORE 把 DLL 复制过去,系统不会自动加载, 系统只会自动加载 xx.deps.json 里面相关的程序集。

竟然不能加载 非 xx.deps.json 里定义程的序集, 那么就使用 AssemblyLoadContext 类来加载, 但是 AssemblyLoadContext 类在加载程序集的时候, 也只会加载程序集本身, 程序集所依赖的其他程序集, 也不会自动加载, 我们自己的程序集里肯定是要引用相应的数据库操操作来实现 SQL 功能。

再复杂一点的是, 很多类库,为不同的平台,实现了不同的版本, 如 system.data.odbc 程序集, 我们在引用的时候, 引用的是个编译版本, 编译版本里只有方法名称属性等, 方法里都是抛出异常, 然后还有个运行时, 一般放到 runtimes 目录, 里面有 win, linux, osx, freebsd 这种系统, 正常情况下,.net core 会根据平台运行所有平台自动加载相应的目录里的程序集。

AssemblyLoadContext 类根据目前测试的情况来看, 不会自动加载相应的 DLL, 都需要自己判断去哪个目录加载, 可以通过 System.Runtime.InteropServices.RuntimeInformation 的 IsOSPlatform 方法来判断是哪种类型的操作系统。

使用 AssemblyLoadContext 类加载程序集后, 返回一个 Assembly 对象, 也只能通过 Assembly 对象来获取相应的类型, 还是不能直接使用 Type.GetType(typeName) 的方式来获取。