C#项目中无法加载自定义库LibFor2,抛出FileNotFoundException异常
检查库文件的部署位置
运行时CLR会优先在主程序的输出目录(如bin/Debug/netX.x)查找程序集。确保LibFor2.dll及相关文件(.pdb、.xml)已存在于此目录。
快速解决方式:右键主项目→添加→引用→浏览选中LibFor2的DLL,然后在该引用的属性面板中,将复制本地设置为True,这样编译时会自动把库文件同步到输出目录。确认程序集名称的准确性
Assembly.Load("LibFor2")中的参数是程序集的逻辑名称,而非文件名。右键LibFor2项目→属性→应用程序,查看“程序集名称”是否确实为LibFor2。如果程序集带有版本号、公钥令牌等信息,需要传入完整名称(例如LibFor2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null)。
也可以改用Assembly.LoadFrom(@"D:\Projects\LibFor2\bin\Debug\LibFor2.dll")直接指定文件路径,规避名称匹配问题。排查依赖项缺失问题
异常可能是LibFor2自身依赖的其他库未找到。可以使用以下工具定位具体问题:- .NET Framework:使用
fuslogvw.exe(程序集绑定日志查看器)生成详细的绑定失败日志; - .NET Core/.NET 5+:使用
dotnet trace命令追踪程序集加载过程。
若LibFor2依赖第三方库,需确保这些依赖库也同步到主程序的输出目录。
- .NET Framework:使用
验证框架版本兼容性
主项目与LibFor2的目标框架必须兼容。例如主项目基于.NET 6,LibFor2不能是.NET Framework 4.0(跨框架加载需额外配置)。右键两个项目的属性面板,确认目标框架版本匹配或兼容。检查类的完整命名空间
代码中a.CreateInstance("Class1")和t.GetType("Class1")若遗漏了Class1的命名空间(比如Class1实际位于LibFor2.Class1),会导致类型查找失败,也可能间接触发加载异常。需传入完整的“命名空间+类名”。
内容的提问来源于stack exchange,提问作者BicoNn

