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

VB.NET能否使用提取图片的同类方法从其他EXE提取My.Settings配置值

问题解答

可以用类似加载外部程序集的方式提取其他exe的My.Settings设置值,但你原有代码的资源寻址逻辑存在错误,调整方法如下:


错误点说明

  • My.Settings对应的资源路径不是{程序集名}.resources,VB.NET编译时会把My.Settings封装到{程序集名}.My.MySettings类中,不能用提取普通图片资源的ResourceManager路径寻址
  • 你原有代码中直接读取普通资源的逻辑不适用于Settings,需要先获取MySettings的单例实例再读取对应属性

可用实现代码

Try
    Dim exePath As String = IO.Path.Combine(Application.StartupPath, PluginPath)
    Dim externalAssembly As Assembly = Assembly.LoadFile(exePath)
    Dim assemblyName As String = IO.Path.GetFileNameWithoutExtension(exePath)
    
    ' 定位外部程序集的MySettings类型
    Dim settingsType = externalAssembly.GetType($"{assemblyName}.My.MySettings")
    If settingsType Is Nothing Then
        MsgBox("目标程序集未找到My.Settings定义")
        Return
    End If
    
    ' 获取MySettings的默认单例实例
    Dim defaultInstanceProp = settingsType.GetProperty("Default", System.Reflection.BindingFlags.Public Or System.Reflection.BindingFlags.Static)
    Dim settingsInstance = defaultInstanceProp.GetValue(Nothing)
    
    ' 读取指定设置项的值,替换成你要取的设置项名称即可
    Dim targetSettingValue = settingsType.GetProperty("MyStringRefrenceName").GetValue(settingsInstance).ToString()
    
    ' 后续使用取值
    MsgBox(targetSettingValue)
Catch ex As Exception
    MsgBox("提取失败:" & ex.Message)
End Try

注意事项

  • 仅当目标exe的My.Settings设置项的访问修饰符为Public时可直接读取,如果是Friend修饰,需要你的程序和目标exe使用相同强签名、或者在目标项目的AssemblyInfo里配置InternalsVisibleTo指定你的程序集名称才能读取
  • 上述方法仅适用于.NET Framework编译的VB.NET exe,.NET Core/.NET 5+版本的VB.NET项目My.Settings存储逻辑有差异,需要额外适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:48:02