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

.NET Core下SharpShell加载图片时菜单静默失效求助

问题分析

这个System.MissingMethodException本质是SharpShell 2.7.2与.NET 8的Windows Forms API兼容性问题:

  • SharpShell 2.7.2发布时间较早,适配的是.NET Framework/.NET Core 3.x等旧版本,而.NET 8中System.Windows.Forms.ToolStripItem的Image属性setter的签名或加载逻辑发生了变化
  • 另外.NET 6+中System.Drawing相关API被移到了System.Drawing.Common NuGet包,且仅支持Windows平台,若未正确引用也会引发此类反射/方法找不到的错误
解决方案

1. 确保正确引用必要的NuGet包

在项目中安装以下包:

Install-Package System.Windows.Forms
Install-Package System.Drawing.Common

同时检查项目文件(.csproj)中是否包含以下配置,确保启用Windows Forms支持:

<PropertyGroup>
  <TargetFramework>net8.0-windows</TargetFramework>
  <UseWindowsForms>true</UseWindowsForms>
  <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

2. 替换图片赋值方式(绕过直接set_Image的兼容性问题)

不要直接给Image属性赋值,改用ImageList绑定图片:

protected override ContextMenuStrip CreateMenu() {
    var menu = new ContextMenuStrip();
    var imageList = new ImageList();
    // 加载图片(从资源或文件)
    var assembleImage = Properties.Resources.AssembleAZ;
    imageList.Images.Add(assembleImage);
    
    try {
        log("getting menu");
        var mainItem = new ToolStripMenuItem {
            Text = "Assembler A->Z",
            ImageIndex = 0 // 绑定ImageList中的图片索引
        };
        mainItem.ImageList = imageList;
        
        mainItem.Click += (sender, e) => {
            log(SelectedItemPaths);
        };

        menu.Items.Add(mainItem);
    } catch (Exception? ex) {
        log(ex);
    }

    return menu;
}

3. 升级SharpShell到兼容.NET 6+的版本

SharpShell的官方版本可能已更新对.NET 6+的支持,尝试升级到最新稳定版:

Install-Package SharpShell -Version 2.7.3

4. 启用程序集绑定日志辅助排查

若问题仍存在,可开启程序集绑定日志查看具体的程序集加载冲突:

  • 打开管理员命令提示符,执行:
reg add "HKLM\Software\Microsoft\Fusion" /v EnableLog /t REG_DWORD /d 1 /f
  • 重现问题后,查看%windir%\assembly\log\bindlog.txt,找到与System.Windows.Forms或System.Drawing相关的加载错误,针对性解决

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:50:06