CAD二次开发(8)-探索实现不重启CAD进行热部署代码

server/2024/9/24 21:17:42/

最近在研究CAD二次开发过程中,调试代码的过程中,需要频繁地重启CAD,非常浪费我们的开发时间,所以我就一直在想,怎么可以实现在不每次重启代码和CAD的情况下,实现代码的热部署效果。

我找到的方式,就是通过另外一个工具项目,实现对你需要调试的项目的反射,具体操作请看下面。

创建工具项目

在这里插入图片描述
引入CAD相关的包
在这里插入图片描述

反射代码


using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.DatabaseServices;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Reflection;namespace ribbon_test
{public class LoadX{private Action cmd;[CommandMethod("DD")]public void ReloadX(){string dllName = "E:\\cnet_project\\cad-demo\\bin\\Debug\\ribbon_test.dll";//生成的需要调用的文件名string className = "ribbon_test.Less02_创建对象";//空间名.类名string methodName = "CreatedLine";//method名var adapterFileInfo = new FileInfo(Assembly.GetExecutingAssembly().Location);var targetFilePath = Path.Combine(adapterFileInfo.DirectoryName,dllName);var targetAssembly = Assembly.Load(File.ReadAllBytes(targetFilePath));var targetType = targetAssembly.GetType(className);var targetMethod = targetType.GetMethod(methodName);var targetObject = Activator.CreateInstance(targetType);cmd = () => targetMethod.Invoke(targetObject,null);try{cmd?.Invoke();}catch (System.Exception ex){Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.Message);}}}public class CmdInfo{ public string DllName { get; set; }public string ClassName { get; set; }public string MethodName { get; set; }}
}

在里面 我们需要明确如下几个参数:
dllName :这是我们需要调试的项目构建的位置。
className :这是我们调试项目的类名称,注意要加上空间名称。
methodName :这是我们调试项目,要调试的方法名称。

要调试的项目

在这里插入图片描述
在这里插入图片描述

具体操作

  1. 我们首先启动工具项目,让工具项目联动启动CAD。
  2. 然后加载我们的工具项目dll。
  3. 然后输入工具命令,我的是DD。
    就可以看到如下提示:
    在这里插入图片描述
    表示要调试的项目命令加载成功。
  4. 如果我们调试代码有所修改,修改完后重新生成方案即可。
  5. 再一次输入工具命令,重新加载到CAD中。

http://www.ppmy.cn/server/48175.html

相关文章

在keil5中打开keil4工程的方法

文章目录 1. 打开文件 2. 安装旧版本包 3. 在keil4中打开keil5工程 1. 打开文件 在keil5 MDK的环境下,打开keil4的工程文件,会弹出下图所示的窗口: 参考官网的解释这两个方法分别为: 1. 使用MDK 版本 4 Legacy Pack时&#x…

使用wireshark分析tcp握手过程

开启抓包 tcpdump -i any host 127.0.0.1 and port 123 -w tcp_capture.pcap 使用telnet模拟tcp连接 telnet 127.0.0.1 123 如果地址无法连接,则会一直重试SYN包,各个平台SYN重试间隔并不一致,如下: 异常站点抓包展示&#xff…

【Vue】单页应用程序介绍

通常基于Vue去开发一整个网站,开发出来的这整个网站应用,我们都会叫做单页应用程序 概念 单页应用程序:SPA【Single Page Application】是指所有的功能都在一个html页面上实现 我们可以将页面共用的部分封装成组件,底下要切换的也…

vue3 监听器,组合式API的watch用法

watch函数 在组合式 API 中,我们可以使用 watch 函数在每次响应式状态发生变化时触发回调函数 watch(ref,callback(newValue,oldValue),option:{}) ref:被监听的响应式量,可以是一个 ref (包括计算属性)、一个响应式…

Fatfs

STM32进阶笔记——FATFS文件系统(上)_stm32 fatfs-CSDN博客 STM32进阶笔记——FATFS文件系统(下)_stm32 文件系统怎样获取文件大小-CSDN博客 STM32——FATFS文件基础知识_stm32 fatfs-CSDN博客 021 - STM32学习笔记 - Fatfs文件…

java static 如何理解

在Java中,static关键字是一个重要的概念,它用于定义类的静态成员,包括静态变量(也称作类变量)、静态方法和静态代码块。static关键字的主要作用是创建独立于对象的成员,这些成员属于类本身,而不…

2024河南高考作文ChatGPT

阅读下面的材料,根据要求写作。(60分) 随着互联网的普及、人工智能的应用,越来越多的问题能很快得到答案。那么,我们的问题是否会越来越少? 以上材料引发了你怎样的联想和思考?请写一篇文章。 要…

16、matlab求导、求偏导、求定积分、不定积分、数值积分和数值二重积分

1、matlab求导,diff()函数 1)一阶导数 语法:diff(f(x)):求一阶导数 //diff(f(x),n):求n阶导数(n为具体正整数) 以函数(cos(x)sin(x)-x^2)的一阶导数为例 一阶导数代码: yms x;%声明符号变量x f(x)cos(…