You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET解决方案中从指定文件夹加载指定版本程序集失败求助

VB.NET 指定文件夹加载DLL异常的解决思路

1. 校验app.config配置的准确性

  • 检查程序集名称拼写:你配置里的Eplan.EplApi.Starteru可能存在拼写错误,EPLAN官方API组件通常命名为Eplan.EplApi.Starter,建议核对目标DLL的实际文件名。
  • 匹配公钥令牌与版本:
    用命令确认目标DLL的真实公钥令牌:
    dotnet sn -Tp "C:\Program Files\EPLAN\Platform\2023.0.3\Bin\Eplan.EplApi.Starteru.dll"
    
    同时右键DLL→属性→详细信息,确认程序集版本,必须与codeBase标签里的version完全一致,不能随意填写1.0.0.0。
  • 禁用发布策略:将publisherPolicy apply="yes"改为apply="no",发布策略可能会覆盖你自定义的路径配置。

2. 排查权限问题

目标路径C:\Program Files\EPLAN属于系统保护目录,普通权限的程序可能无法读取该目录下的文件。尝试:

  • 右键以管理员身份运行VB.NET程序
  • 将目标DLL复制到非系统目录(如D:\EplanDlls),修改配置路径后测试

3. 修正动态加载逻辑

如果之前的动态加载方案失效,推荐使用AppDomain.AssemblyResolve事件来拦截加载请求,确保程序集被正确定位:

' 在程序启动时注册事件(如Main方法或窗体构造函数)
AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf ResolveTargetAssembly

Private Function ResolveTargetAssembly(sender As Object, args As ResolveEventArgs) As Assembly
    ' 提取程序集名称,拼接完整路径
    Dim assemblyName As String = args.Name.Split(","c)(0)
    Dim targetPath As String = $"C:\Program Files\EPLAN\Platform\2023.0.3\Bin\{assemblyName}.dll"
    
    If IO.File.Exists(targetPath) Then
        Return Assembly.LoadFrom(targetPath)
    End If
    Return Nothing
End Function

注意:若目标DLL依赖其他组件,需确保这些依赖也能被该事件或系统加载机制找到。

4. 获取完整异常信息

原异常无额外提示,可通过捕获完整异常栈定位根因:

Try
    ' 放置触发DLL加载的初始化代码
Catch ex As Exception
    ' 输出完整异常详情到弹窗或日志
    MessageBox.Show($"异常详情:{ex.ToString()}")
End Try

完整的异常信息会明确告知是版本不匹配、依赖缺失还是权限不足等具体问题。

5. 检查DLL依赖完整性

用Dependency Walker或dotnet-depends工具扫描目标DLL,确认是否存在缺失的依赖项,同时核对DLL的.NET框架版本是否与你的VB.NET项目兼容(比如目标DLL基于.NET Framework 4.8,项目不能用.NET 6)。

内容的提问来源于stack exchange,提问作者Gianfranco Vrech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:00:57