.NET CORE 动态加载 DLL 的问题
有个系统, 需要适应不同类型的数据库(同时只使用其中一种),如果把数据库操作层提取出来,然后针对不同的数据库使用不同的 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) 的方式来获取。
最新文章
- [SDOI2013]方程
- 利用node来下载图片到本地
- Linux命令之diff
- 熟悉熟悉常用的几个算法用JS的实现
- SQL2012 提示评估已过期 解决方案- sql server问题
- winserver 2008 r2 iis7.5 实现php wordpress url静态化操作步骤(UrlRewrite实现)
- Netsharp快速入门(之17) Netsharp基础功能(参照高级设置)
- Interview-Increasing Sequence with Length 3.
- Qwt的编译与配置
- YII CRUD 例子
- My.Ioc 代码示例——如何使用默认构造参数,以及如何覆盖默认构造参数
- bootstrap注意事项(一)
- 想要见识外太空?一款VR头显就能帮你实现梦想
- Ubuntu16.04下Office替代品Office Online
- 每天记录一点:NetCore获得配置文件 appsettings.json
- JS学习笔记Day10
- Cocos Creator 橡皮差(刮刮卡)功能(转)
- linux系统 之 curl命令
- PHP 抽象类、接口,traint详解
- 6个免费的C++图形和游戏库