全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#怎么动态加载程序集 Assembly.LoadFile使用方法

Assembly.LoadFile 是 C# 中按文件路径动态加载程序集的方法,但不会自动解析依赖项;需手动处理依赖,如放置于 bin 目录、订阅 AssemblyResolve 事件或改用 AssemblyLoadContext。

Assembly.LoadFile 是 C# 中用于从指定文件路径动态加载程序集(.dll 或 .exe)的方法,它会将程序集加载到当前上下文(LoadContext),但**不会自动解析其依赖项**——这是使用时最容易出错的关键点。

基本用法:加载并创建类型实例

假设你有一个外部类库 MyPlugin.dll,其中包含一个公开类 MyPlugin.Service

  • 先确保该 DLL 文件路径可访问(如放在程序同目录或绝对路径)
  • 调用 Assembly.LoadFile(path) 获取程序集对象
  • assembly.GetType("FullName") 获取类型,再通过 Activator.CreateInstance 创建实例
示例代码:
string dllPath = @"C:\Plugins\MyPlugin.dll";
Assembly assembly = Assembly.LoadFile(dllPath);
Type serviceType = assembly.GetType("MyPlugin.Service");
object instance = Activator.CreateInstance(serviceType);
// 调用方法(需反射或接口约定)
serviceType.GetMethod("DoWork").Invoke(instance, null);

⚠️ 注意依赖项不会自动加载

LoadFile 只加载指定文件,不处理它引用的其他程序集(比如它依赖 Newtonsoft.Json.dll)。如果缺失依赖,运行时会抛出 FileNotFoundExceptionFileLoadException

  • 解决方案一:把所有依赖 DLL 放到主程序的 bin 目录(让默认 AssemblyResolve 机制找到)
  • 解决方案二:订阅 AppDomain.CurrentDomain.AssemblyResolve 事件,手动返回依赖程序集
  • 解决方案三(推荐.NET Core/.NET 5+):改用 AssemblyLoadContext.LoadFromAssemblyPath,更可控且支持隔离

和 LoadFrom、Load 的区别要点

  • LoadFile:按文件路径加载,不考虑 GAC 或加载上下文策略;同一程序集多次调用会重复加载(不同 Assembly 实例)
  • LoadFrom:也按路径加载,但会触发上下文绑定,可能复用已加载的程序集,且会尝试解析依赖(行为较复杂)
  • Load:按 AssemblyName 加载,走 GAC / bin / probing path,无法直接指定任意磁盘路径

安全与实用建议

  • 不要对不可信来源的 DLL 使用 LoadFile(存在代码执行风险)
  • 生产环境建议配合接口抽象(如定义 IPlugin 在主程序中),用强类型交互替代纯反射
  • .NET 5+ 推荐迁移到 AssemblyLoadContext,支持卸载(Unload),避免内存泄漏
  • 调试时可用 assembly.GetReferencedAssemblies() 查看它依赖哪些程序集

基本上就这些。用对场景、管好依赖、注意上下文,LoadFile 就很可靠。


# js  # json  # app  # ai  # bing  # 区别  # c#  # .net  # 接口  # 对象  # 事件  # 加载  # 主程序  # 这是  # 放在  # 你有  # 会将  # 最容易  # 绑定  # 抛出  # 对不 


相关文章: 大连 网站制作,大连天途有线官网?  ,购物网站怎么盈利呢?  建站OpenVZ教程与优化策略:配置指南与性能提升  已有域名如何快速搭建专属网站?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  建站之星代理如何获取技术支持?  如何在阿里云香港服务器快速搭建网站?  无锡营销型网站制作公司,无锡网选车牌流程?  招贴海报怎么做,什么是海报招贴?  外贸公司网站制作哪家好,maersk船公司官网?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  大同网页,大同瑞慈医院官网?  如何通过商城自助建站源码实现零基础高效建站?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  网站制作说明怎么写,简述网页设计的流程并说明原因?  Android使用GridView实现日历的简单功能  中山网站推广排名,中山信息港登录入口?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  如何选择服务器才能高效搭建专属网站?  建站主机如何选?性能与价格怎样平衡?  如何通过wdcp面板快速创建网站?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  建站主机服务器选购指南:轻量应用与VPS配置解析  在线教育网站制作平台,山西立德教育官网?  如何快速完成中国万网建站详细流程?  如何用AWS免费套餐快速搭建高效网站?  如何制作网站标识牌,动态网站如何制作(教程)?  如何在宝塔面板中创建新站点?  如何配置IIS站点权限与局域网访问?  已有域名和空间,如何快速搭建网站?  制作网站的模板软件,网站怎么建设?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  Bpmn 2.0的XML文件怎么画流程图  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  已有域名和空间如何搭建网站?  小建面朝正北,A点实际方位是否存在偏差?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  个人摄影网站制作流程,摄影爱好者都去什么网站?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  如何快速生成专业多端适配建站电话?  济南企业网站制作公司,济南社保单位网上缴费步骤?  如何在IIS中配置站点IP、端口及主机头?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  北京网站制作公司哪家好一点,北京租房网站有哪些?  TestNG的testng.xml配置文件怎么写 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。