类库依赖查找机制及.NET插件项目依赖管理咨询
插件DLL的依赖查找逻辑
- .NET的程序集加载器默认会从几个关键位置搜索依赖:宿主应用的当前工作目录、插件DLL所在的目录。只要你的
reference.dll和MainProject.dll在同一个输出目录,宿主加载插件时,加载器会自动扫描这个目录找到依赖,不用额外加路径配置。 - 至于VS里直接跑主项目exe要手动加路径,是因为此时程序的当前工作目录是VS的项目根目录,不是输出目录,加载器找不到输出文件夹里的
reference.dll,所以得手动指定。但作为插件运行时,宿主加载插件时会把插件所在目录纳入搜索范围,自然就不用额外操作了。
大规模项目的类库管理方案
解决命名冲突
- 给程序集加强名称:强名称包含公钥、版本号等唯一标识,哪怕文件名一样,只要强名称不同,.NET就会当成不同的程序集,不会冲突。
- 用分层命名空间:按业务模块、产品线划分命名空间,比如
MyCompany.OrderSystem.Payment.Utils,从根到分支层层区分,避免类名重复。 - 内部类库用NuGet管理:把
reference.dll这类辅助组件打包成内部NuGet包,统一版本管控,减少本地引用的混乱。
避免加载混乱
- 用
AssemblyLoadContext隔离依赖:.NET Core及之后版本里,每个插件可以用独立的加载上下文,把不同插件的依赖隔离开,防止互相干扰。 - 输出目录结构化:把不同模块的依赖放到对应子目录,然后通过
runtimeconfig.json的additionalProbingPaths配置搜索路径,或者在自定义加载逻辑里扫描子目录。 - 统一依赖版本:用绑定重定向(在
app.config或runtimeconfig.json里配置),确保同一个依赖只加载指定版本,避免版本冲突导致的加载失败。
内容的提问来源于stack exchange,提问作者alan6690
相关产品推荐
相关产品推荐

