Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何提高.NET插件开发的速度?_.net_Autocad_Linqpad_Autocad Plugin_Objectarx - Fatal编程技术网

如何提高.NET插件开发的速度?

如何提高.NET插件开发的速度?,.net,autocad,linqpad,autocad-plugin,objectarx,.net,Autocad,Linqpad,Autocad Plugin,Objectarx,我正在开发一个AutoCAD外接程序,它使用.NET 4.6程序集。我发现发展过程非常令人沮丧;API非常大,入门之外的文档到处都是,很难找到。完成任何事情的唯一方法似乎只是在VisualStudio中对函数进行原型化,然后看看它是否有效。然后,加载AutoCAD并附加调试器需要几分钟,这会破坏我的原型工作流程 如果我能有像Linqpad这样的东西来原型化我的应用程序,这样我就可以找到我正在寻找的数据,这将非常方便。我不赞成使用Linqpad;然而,如果我还缺少另一种技巧,我很想听听 我不确定这

我正在开发一个AutoCAD外接程序,它使用.NET 4.6程序集。我发现发展过程非常令人沮丧;API非常大,入门之外的文档到处都是,很难找到。完成任何事情的唯一方法似乎只是在VisualStudio中对函数进行原型化,然后看看它是否有效。然后,加载AutoCAD并附加调试器需要几分钟,这会破坏我的原型工作流程

如果我能有像Linqpad这样的东西来原型化我的应用程序,这样我就可以找到我正在寻找的数据,这将非常方便。我不赞成使用Linqpad;然而,如果我还缺少另一种技巧,我很想听听


我不确定这是否是我可以用专业版实现的,但由于没有试用版,我无法找到答案

诚然,API确实很大,有些功能的文档记录也很差。我发现很难开始,但一旦我熟悉了核心概念和功能,我就开始非常喜欢使用它,因为API非常强大,一旦你“理解它”,它就很容易使用。我不确定你查过哪些来源,但我是从一开始的。向下滚动至培训实验室。我建议您至少阅读ObjectARX和.NET培训实验室。花几天时间在.NET实验室中工作,因为它将为您节省无数的工作时间

至于调试,下面的设置应该为您提供最有效的方法(这里我使用VS 2015和AutoCad 2015)。在项目属性中的“调试”选项卡下,您的设置应如下所示:

  • 选中“启动外部程序:”并输入AutoCad可执行文件的路径。这适用于其他版本的AutoCad
  • 在“命令行参数:”字段中,输入
    /nologo
    。这将大大加快AutoCad的启动速度
  • 若要自动将dll加载到AutoCad中,可以通过注册表(我的首选方式)或通过acad20xdoc.lsp或acad.lsp(默认情况下,AutoCad将为打开的每个文档运行这些脚本,或在AutoCad分别启动时运行这些脚本)。您可以在中找到详细信息

    现在按F5将启动AutoCad并加载调试器。现在,您可以像处理任何其他代码一样,逐行处理代码。在代码的开头放置断点,然后在AutoCad中执行命令。你的突破点应该被击中

    旁白:
    /nologo
    也可以添加到AutoCad的桌面快捷方式中,以加快用户使用AutoCad的速度。可以将其添加到快捷方式属性中的“目标:”字段中。i、 e.
    “C:\Program Files\Autodesk\AutoCAD 2015\acad.exe”/nologo

    注意:可能有问题!确保项目引用的所有AutoCad DLL的特性都设置为:

  • 嵌入互操作类型->False
  • 复制本地->假。另外,请确保调试/发布目录中没有AutoCAD dll(即
    acmgd.dll
    或名称以“ac”开头的任何dll)。删除您找到的任何内容。不这样做将导致错误和崩溃,这将非常难以追踪

  • 您可以在调试时运行一个脚本,将DLL与

    在VisualStudio的“命令行参数”文本框中已有的内容的末尾添加以下内容

    /b“C:\Path\To\Script\AutoNetLoadDebug.scr”
    

    名为AutoNetLoadDebug.scr的脚本的内容如下

    netload "C:\Path\To\Dll\Your.dll"
    
    注意:该行的末尾需要一个换行符,以便它实际运行该命令。确保未将AutoCAD设置为已加载该DLL或其其他版本。如果执行此操作,请使用命令行开关以不同的配置启动AutoCAD

    不能在AutoCAD之外从AutoCAD API运行任何东西,.NET DLL只是AutoCAD内部非托管代码的映射

    我做了很多日志记录(),特别是在调试中。Github上也有。我曾经尝试模拟AutoCAD API一次。因此,CADtest

    Protip:尝试到处捕捉并观察空值,但您可能已经发现了这一点


    阅读并查看此处提到的其他论坛和博客,它们是AutoCAD API知识的金矿

    测试/调试代码的过程是什么?加载autocad并附加调试器的几分钟时间听起来不太合适(太长了)。希望这是我可以帮助的。编译几乎是即时的,但实际上加载AutoCAD、打开目标模型、附加调试器和加载程序集都是单独的步骤。似乎如果从一开始就使用调试器启动AutoCAD,它就会崩溃(可能是反盗版措施?)。我研究过如何实时重新加载插件,但它会在另一个应用程序域中,这意味着我必须找出如何调用跨应用程序域。我要做的是:在Visual Studio中,在包含外接程序代码的.NET dll中,转到属性->调试->启动操作,选择“启动外部程序:”,并粘贴
    C:\Program Files\Autodesk\AutoCAD 2015\acad.exe
    (这将根据您的AutoCAD版本而有所不同)。然后在下面的“命令行参数:”字段中输入
    /nologo
    (这将大大加快AutoCad加载速度)。你试过这个吗?这就是导致崩溃的原因吗?当然,按F5键将启动AutoCAD并将程序集加载到调试器中,您可以在调试器中单步执行代码行。这不应该超过5到10秒,这取决于你的机器。是的,添加
    /nologo
    可以达到目的,事实上这大大加快了速度。非常感谢@Nik