zony.me

.NET Core 与 .NET Framework 动态加载DLL的一些不同点

在.NetCore实现插件系统的时候,发现某些方法与在.NetFramework内的使用方法不一样,在此做一个记录供以后查阅。

NO.1 Assembly.Load 与 AssemblyLoadContext.Default.LoadFromXXX

在.NetFramework当中,如果要加载某一个程序集的话,通过Assembly的Load的各种重载方法即可通过文件流、文件路 径等方式将其加载到当前调用方的应用程序域当中。但是在.Net Core当中则不然,它并没有在Assembly当中提供Load 方法供开发人员操作,而你则需要在Nuget里面对当前项目安装System.Runtime.Loader,然后使用其提供的 AssemblyLoadContext来进行程序集加载。

引用自OSChina的一篇资讯:

App Domain

App Domain在CoreCLR中得以实现,但没有在.NET Native中实现。由于对App Domain的实现需要大量的运行时特性支持,因此目前还没有任何对它的支持计划。“对于代码的隔离,我们建议通过进程或容器实现。而对于程序集的动态加 载,我们建议使用新的AssemblyLoadContext类。”

例如以下代码:

chsarp
// .NetFramework
public void assemblyTestMethod()
{
  var _asm = Assembly.Load("C:\Test.dll");
}
// .Net Core
public void assemblyTestMethodCore()
{
    var _asm = AssemblyLoadContext.Default.LoadFromAssemblyPath("C:\Test.dll");
}

NO.2 GetCustomAttribute() 扩展支持

在.NetFramework当中,GetCustomAttribute()方法是针对Type与TypeInfo对象的,但是在.NetCore当中如果要调用这个 方法的话,则仅能通过Type.GetTypeInfo().GetCustomAttribute()来获得对象的特性标签。

NO.3 GetInterface与GetInterfaces方法

貌似在.NetCore当中的Type对象是没有Getinterface方法的,So…你只有使用后者获得一个IEnumerable对象再来筛选啦。

.NET Core 与 .NET Framework 动态加载DLL的一些不同点
作者 Zony · 发布于 2017-08-02
Licensed under CC BY-NC-SA 4.0
← 上一篇将指定实体序列化为 XML 文档下一篇 →C# 函数式编程:部分应用与局部套用
目录