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

Posted

技术标签:

【中文标题】如何提高 .NET 插件开发的速度?【英文标题】:How can I improve the speed of .NET Plug-in Development? 【发布时间】:2018-04-04 00:28:19 【问题描述】:

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

如果我可以使用 Linqpad 之类的东西来对我的应用程序进行原型制作,那将非常方便,这样我就可以找到我正在寻找的数据。我不同意使用 Linqpad 的想法。但是,如果还有其他我想念的技术,我很想听听。

我不确定这是否是我可以通过专业版实现的目标,但由于没有试用版,我无法找到。

【问题讨论】:

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

确实,API 确实很大,而且某些功能的文档记录也很差。我发现上手很困难,但是一旦我熟悉了核心概念和功能,我就开始非常喜欢使用它,因为 API 非常强大且一旦“掌握”就易于使用。我不确定您检查了哪些来源,但我从this Developer Documentation 开始。向下滚动到培训实验室。我建议您至少通读 ObjectARX 和 .NET 培训实验室。花几天时间研究 .NET 实验室,因为这将为您节省无数小时。

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

    选中“启动外部程序:”并输入 AutoCad 可执行文件的路径。这适用于其他版本的 AutoCad。 在“命令行参数:”字段中,输入/nologo。这将显着加快 AutoCad 的启动速度。

要将您的 dll 自动加载到 AutoCad 中,您可以通过注册表(我的首选方式)或通过 acad20xxdoc.lsp 或 acad.lsp(AutoCad 将默认为每个您打开的文档或 AutoCad 启动时分别)。详情请见this post。

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

除此之外: /nologo 也可以添加到 AutoCad 的桌面快捷方式中,以便为用户加速 AutoCad。它可以添加到快捷方式属性中的“目标:”字段中。即"C:\Program Files\Autodesk\AutoCAD 2015\acad.exe" /nologo

注意:可能的问题!确保您的项目引用的任何 AutoCad dll 的属性设置为:

    嵌入互操作类型 -> False 复制本地 -> 错误。还要确保 Debug/Release 目录中没有 AutoCAD dll(即acmgd.dll 或任何名称以“ac”开头的 dll)。删除您找到的任何内容。不这样做会导致难以追查的错误和崩溃。

【讨论】:

【参考方案2】:

您可以在调试时运行脚本以使用/b commandline switch NETLOAD DLL。

在 Visual Studio 命令行参数文本框中已有内容的末尾添加如下内容

/b "C:\Path\To\Script\AutoNetLoadDebug.scr"

名为AutoNetLoadDebug.scr 的脚本的内容类似于

netload "C:\Path\To\Dll\Your.dll"

注意:该行的末尾需要一个换行符,以便它实际运行命令。确保您没有将 AutoCAD 设置为已经加载该 DLL 或它的不同版本。如果这样做,请使用 /p 命令行开关以不同的配置文件启动 AutoCAD。

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

我做了很多日志记录 (Serilog),尤其是在调试时。 Github 上还有 CADtest 和 https://github.com/wtertinek/AcadTestRunner。我曾尝试模拟 AutoCAD API。 一次。因此,CADtest。

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

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

【讨论】:

以上是关于如何提高 .NET 插件开发的速度?的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse提高开发速度-插件篇Checkstyle的使用

提高网站页面加载速度的方法

使用这些idea插件让开发效率提高5倍

javaScript学习总结——jQuery插件的开发

分享18个工具插件帮助iOS开发者提升开发速度

JavaScript学习总结——jQuery插件开发与发布