zoukankan      html  css  js  c++  java
  • cad.net dll动态加载之后如何调试

    前文提要

    cad.net dll动态加载

    目的

    本质上来说dll的动态加载是为了不占用文件,不占用文件是为了重复编译,

    重复编译是为了不重启cad就可以载入插件来调试,

    那么vs要如何调试已经动态加载进来的东西呢?

    所以我们此次研究调试[次插件项目].

    方法1

    高版本cad的话,利用[主插件项目]来调试启动cad,然后将[次插件项目]的dll动态加载进来,

    在cad上面敲调试的命令,

    恰逢你此时vs有开[次插件项目]就会捕捉到上面的.cs文件,

    如果没有开,vs会弹出这个对话框让你找代码文件,就选中cs文件就好了.

    它就会击中断点了!!

    这里的原理是vs会将所有代码文件缓存在一个储存区,然后通过储存区找.

    一旦接受这个设定,请看下一个方法.

    方法2

    直接启动cad(不调试),

    [主插件项目]的dll用netload(或者注册表)加载到cad,再通过它把[次插件项目]的dll用动态加载,

       动态加载的方法:
    可以做一个netload2命令;
    也可以做一个文档栏,然后文档栏可以接受拖入次dll;(可参考我文档栏工程噢)

    此时[次插件项目]的dll已经通过字节码加入在托管内存了.(脱钩了)

    然后在[cad次插件]的vs工程上面,选择附加进程调试Ctrl+Alt+P, 选择cad附加..

    即使当前的dll已经脱钩了,但是仍然可以让vs链接上对应的文件来调试...

    其中的原理是vs会检索具有相同GUID的文件?

    我也没有懂为什么.....明明代码文件是属于无关的了....高版本却可以连接到,低版本就连接不到.......

     

     

    调试Acad08不成功

    Acad08附加进程调试会这样..(我已经试过很多很多方法了....大家用高版本调试吧......

    我试了多少种方法:..............................

    测试1:

    打开 acad.exe.config,内容如下

    <configuration>
       <startup>
    <!--We always use the latest version of the framework installed on the computer. If you
    are having problems then explicitly specify .NET 2.0 by uncommenting the following line.
            <supportedRuntime version="v2.0.50727"/>
    -->
       </startup>
    </configuration>

    改为:

    <?xml version="1.0"?>
    <configuration>
      <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v2.0.50727"/>
      </startup>
      <runtime><generatePublisherEvidence enabled="false"/> </runtime>
    </configuration>

    勾选启用本地代码调试(T),就可以 F5 直接调试。

    测试2:

    将编译的目标平台设置为X86而不是AnyCPU或者X64

    https://www.cnblogs.com/jeffwongishandsome/p/How-To-Solve-App-Break-Mode-Problem.html

    测试3:

    大家如果能成功也请告诉我...

    动态加载之后能干什么

    动态加载之后,如果通过代码实现反编译,

    那么可以将高版本的dll和低版本的dll加入到你的程序上面,你再通过替换内部函数和配置文件的方式来实现...

    明经netloadx实现的是读写每个命令载入到新的程序域.

    而往往事情想要做好并没有那么简单,需要自己去实现每句的反编译,再通过反编译替换,

    如TextStyle替换成高版本的TextStyleId.

    低版本的引用替换成高版本的引用....

    不过这个好像刚需性不大..

    加上读写il文件是极其复杂的,好在github上面有开源的反编译器代码 https://github.com/icsharpcode/ILSpy

    ,所以是能够实现的,就是理解反编译代码都需要耗费点时间....

    剩下靠你们辣.....

    (完)

  • 相关阅读:
    [转]PHP学习入门的一些基础知识
    原来我一直徘徊在选择中
    do while循环学习
    C#装箱
    我的新手学习失败之谈
    C#教程第五课:方法
    转.iPhone开发网站、论坛、博客
    数据库作业Email发送
    安装卸载WINDOWS服务
    SQL SERVER 2008 数据库收缩语句
  • 原文地址:https://www.cnblogs.com/JJBox/p/14050111.html
Copyright © 2011-2022 走看看