dnSpy调试工具二次开发1-新增菜单

2024-01-07 16:44

本文主要是介绍dnSpy调试工具二次开发1-新增菜单,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

测试环境:

window 10

visual studio 2019   版本号:16.11.15

.net framework 4.8  开发者工具包   下载 .NET Framework 4.8 | 免费官方下载

.net 5开发者工具包 

下载 .NET 5.0 (Linux、macOS 和 Windows)

利用git拉取代码(源码地址:GitHub - dnSpy/dnSpy: .NET debugger and assembly editor):

git clone --recursive https://github.com/dnSpy/dnSpy.git

假设你已经成功拉取了代码,用visual studio 2019打开并等待包下载完毕即可,可能时间会比较长

先看一下实现的最终效果:

测试步骤如下:

1  在名为dnSpy的项目下Menus目录的类MenuConstants新增一级菜单相关常数

/// <summary>新增的一级菜单</summary>
public const string APP_MENU_NEW_GUID = "D9E5C206-37C3-4DDA-B65D-D82A19062735";
/// <summary>新增的菜单Order</summary>
public const double ORDER_APP_MENU_NEW = 1002000;

2  在名为dnSpy的项目下Properties目录的资源文件dnSpy.Resources.zh-CN.resx新增字符串资源(这里配置不同国家语言的资源文件,我的操作系统是中文,所以编辑的是dnSpy.Resources.zh-CN.resx),键的名称:Menu_TestNew   键值:测试新增

3  在名为dnSpy的项目下Menus目录的类文件AppMenus.cs新增一级菜单类

	[ExportMenu(OwnerGuid = MenuConstants.APP_MENU_GUID, Guid = MenuConstants.APP_MENU_NEW_GUID, Order = MenuConstants.ORDER_APP_MENU_NEW, Header = "res:Menu_TestNew")]sealed class NewMenu : IMenu { }

其实上面的Header就是绑定到资源对应的中文名称,所以这个一级菜单的名称将会是:测试新增

注意:想要显示这个一级菜单,必须至少有一个二级菜单,不然显示不出来

4  在名为dnSpy的项目下Menus目录的类MenuConstants新增二级菜单相关常数

/// <summary>二级菜单常数</summary>
public const string GROUP_APP_MENU_TEST_NEW = "1002000,D9E5C206-37C3-4DDA-B65D-D82A19062735";

字符串的值格式尽量保持为:ORDER_APP_MENU_NEW,APP_MENU_NEW_GUID

5  在名为dnSpy的项目下MainApp目录新增NewTestScreen.cs并编辑如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using dnSpy.Contracts.Menus;namespace dnSpy.MainApp {[ExportMenuItem(OwnerGuid = MenuConstants.APP_MENU_NEW_GUID, Header = "res:Menu_TestNew", Group = MenuConstants.GROUP_APP_MENU_TEST_NEW, Order = MenuConstants.ORDER_APP_MENU_NEW)]class NewTestScreen : MenuItemBase {public override void Execute(IMenuItemContext context) {MessageBox.Show("测试新增");}}
}

为了偷懒,二级菜单的名称和一级菜单的中文名称一样

6  生成项目并运行,最终效果如下图:

好了,本文到此结束,如果本文对你有帮助,资助2毛钱作为鼓励呗,穷逼一个,就当筹个网费吧

这篇关于dnSpy调试工具二次开发1-新增菜单的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/580583

相关文章

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Java中基于注解的代码生成工具MapStruct映射使用详解

《Java中基于注解的代码生成工具MapStruct映射使用详解》MapStruct作为一个基于注解的代码生成工具,为我们提供了一种更加优雅、高效的解决方案,本文主要为大家介绍了它的具体使用,感兴趣... 目录介绍优缺点优点缺点核心注解及详细使用语法说明@Mapper@Mapping@Mappings@Co

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

Rsnapshot怎么用? 基于Rsync的强大Linux备份工具使用指南

《Rsnapshot怎么用?基于Rsync的强大Linux备份工具使用指南》Rsnapshot不仅可以备份本地文件,还能通过SSH备份远程文件,接下来详细介绍如何安装、配置和使用Rsnaps... Rsnapshot 是一款开源的文件系统快照工具。它结合了 Rsync 和 SSH 的能力,可以帮助你在 li

使用C/C++调用libcurl调试消息的方式

《使用C/C++调用libcurl调试消息的方式》在使用C/C++调用libcurl进行HTTP请求时,有时我们需要查看请求的/应答消息的内容(包括请求头和请求体)以方便调试,libcurl提供了多种... 目录1. libcurl 调试工具简介2. 输出请求消息使用 CURLOPT_VERBOSE使用 C

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni