百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

使用Visual Studio 2017为AutoCAD创建一个c#模板

liuian 2025-09-09 04:37 27 浏览

本教程的目标是展示如何在Visual Studio 2017中创建AutoCAD的c#项目模板,该模板允许在调试模式下从Visual Studio加载DLL来自动启动AutoCAD。

本文展示的示例使用Visual Studio Community 2017,但是它很容易转移到其他版本。

它将创建一个模板AutoCAD 2020,但有可能转到其他版本的AutoCAD。

本例中使用的调试模式的输出目录路径是缺省路径(.\bin\Debug)。

开始一个新项目

在Visual Studio中,选择Visual c#语言和项目类型:类库。

重命名项目:Acad2020Plugin,并根据需要更改位置的路径。

指定目标框架

在新建项目对话框中,选择目标框架下拉列表。

最好将模板创建的版本定位为AutoCAD版本安装的框架版本:

添加AutoCAD库

在“解决方案资源管理器”中,选择“引用”,然后右击并添加引用…

在“引用管理器”对话框中,单击“浏览…”

要添加的引用位于AutoCAD安装目录的目标版本中,或更好的情况下,位于与AutoCAD目标版本对应的ObjectARX20XX\inc 文件夹中(根据AutoCAD的版本和所使用的工作站的平台,为inc -win32或inc -x64)。

你可以在本页下载ObjectARX的最新版本:

[http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=773204]

- AutoCAD 2007 - 2012: AcDbMgd.dll和AcMgd.dll

- AutoCAD 2013 - 2020: AcCoreMgddll, AcDbMgd.dll和AcMgd.dll选择常用的库(如果创建新项目需要,可以很容易地以相同的方式添加其他库)。

设置这些dll的复制本地属性为False:

添加基础代码

将Visual Studio: Class1创建的类重命名为更有意义的名称,例如来自解决方案资源管理器的命令。一个对话框提供重命名项目中所有的引用到Class1,回答

通过双击解决方案资源管理器中的命令,在代码编辑器中打开命令类。

添加using语句来导入最广泛使用的AutoCAD名称空间,并可能导入
Autodesk.AutoCAD.ApplicationServices.Application类的别名。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Autodesk.AutoCAD.ApplicationServices;using Autodesk.AutoCAD.DatabaseServices;using Autodesk.AutoCAD.EditorInput;using Autodesk.AutoCAD.Geometry;using Autodesk.AutoCAD.Runtime;using AcAp = Autodesk.AutoCAD.ApplicationServices.Application;namespace Acad2020Plugin{    public class Commands    {        [CommandMethod("TEST")]        public void Test()        {            var doc = AcAp.DocumentManager.MdiActiveDocument;            var db = doc.Database;            var ed = doc.Editor;            using (var tr = db.TransactionManager.StartTransaction())            {                tr.Commit();            }        }    }}

构建解决方案来检查错误(F6)。

在AutoCAD启动时添加一个脚本来加载应用程序

解决方案资源管理器中,右键单击Acad2020Plugin项目,然后添加和新建项目…

(Ctrl + Shift + A)。

在“添加新项”对话框中,选择“文本文件”。重命名文件:start.scr 并点击添加。

文件在“编辑器”窗口中打开,添加以下语句,并在末尾添加空格。

netload "Acad2020Plugin.dll"

保存 start.scr 文件。

在start.scr的属性(在解决方案资源管理器中选择start.scr),将复制到输出目录属性改为始终复制

注意:对于AutoCAD 2020,必须将LEGACYCODESEARCH系统变量设置为1,以便AutoCAD在搜索路径中集成输出目录(.\Acad2020Plugin\bin\Debug),从而找到DLL和脚本文件。

将MSBuild项目文件更改为启动AutoCAD进行调试

MSBuild项目文件(.csproj)是描述和控制应用程序生成过程的xml文件。

应该在这个文件中添加允许启动AutoCAD的指令,因为Visual Studio处于调试模式,并加载DLL来启动AutoCAD。

在编辑Acad2020Plugin之前,先构建解决方案并关闭Visual Studio.csproj文件。

打开\ Acad2020Plugin \ Acad2020Plugin \ Acad2020Plugin.csproj文件与文本编辑器(记事本,notepad++,等等)。

在与debug生成对应的PropertyGroup节点(文件中的第二个PropertyGroup节点)末尾添加以下节点,如果需要,在更改与start.scr(调试模式目录的输出)文件版本和目标AutoCAD对应的acad .exe文件路径之后一致。

<StartAction>Program</StartAction><StartProgram>C:\Program Files\Autodesk\AutoCAD 2020\acad.exe</StartProgram><StartArguments>/nologo /b "start.scr"</StartArguments>

StartAction指示项目的生成应该启动一个程序(DLL通常不是这样)。

StartProgram指定从AutoCAD开始的程序。

StartArguments包含将运行加载DLL的脚本的参数。

PropertyGroup节点应该是这样的:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "><DebugSymbols>true</DebugSymbols><DebugType>full</DebugType><Optimize>false</Optimize><OutputPath>bin\Debug\</OutputPath><DefineConstants>DEBUG;TRACE</DefineConstants><ErrorReport>prompt</ErrorReport><WarningLevel>4</WarningLevel><StartAction>Program</StartAction><StartProgram>C:\Program Files\Autodesk\AutoCAD 2017\acad.exe</StartProgram><StartArguments>/nologo /b "start.scr"</StartArguments></PropertyGroup>

在ItemGroup节点中添加项目引用。

如果解决方案目录与所引用的dll (AutoCAD或ObjectARX 20XX的安装目录)中的目录位于同一驱动器上,则注册路径是相对的。

由于模板将从解决方案导出到不同的目录中,因此需要将这些相对路径替换为绝对路径。

例如,替换以下相对路径:

<Reference Include="AcCoreMgd">    <HintPath>..\..\..\..\..\..\..\ObjectARX 2020\inc\AcCoreMgd.dll</HintPath>    <Private>False</Private></Reference><Reference Include="AcDbMgd">    <HintPath>..\..\..\..\..\..\..\ObjectARX 2020\inc\AcDbMgd.dll</HintPath>    <Private>False</Private></Reference><Reference Include="AcMgd">    <HintPath>..\..\..\..\..\..\..\ObjectARX 2020\inc\AcMgd.dll</HintPath>    <Private>False</Private></Reference>

替换为:

<Reference Include="AcCoreMgd">    <HintPath>C:\ObjectARX 2020\inc\AcCoreMgd.dll</HintPath>    <Private>False</Private></Reference><Reference Include="AcDbMgd">    <HintPath>C:\ObjectARX 2020\inc\AcDbMgd.dll</HintPath>    <Private>False</Private></Reference><Reference Include="AcMgd">    <HintPath>C:\ObjectARX 2020\inc\AcMgd.dll</HintPath>    <Private>False</Private></Reference>

保存Acad2020Plugin.csproj文件。

这些更改应该出现在Visual Studio项目属性的Debug选项卡中。

导出模板

重新在Visual Studio中打开解决方案Acad2020Plugin.sln。

启动调试(F5)来控制操作。AutoCAD应打开并显示命令行:

命令:netload 程序集文件名: "Acad2020Plugin.dll"

下面的错误消息指出文件start.scr中的DLL名称错误。或者start.scr文件没有被复制到输出目录中(参见复制到输出目录属性)。

Command: netload the Assembly file name: "Acad2020Plugin.dll" Impossible to load the Assembly. Error details: System.IO.FileNotFoundException: could not load file or assembly...

如果一切正常,就该生成模板了。

在“项目”菜单上,选择“导出模板”…

在“模板导出向导”框中,选择“项目模板”,然后继续。

根据需要更改模板的名称,例如AutoCAD 2020 Plugin,并可能添加一个description: template for AutoCAD 2020 Custom Command。

完成。

使用默认选项,模板以ZIP文件的形式导出到文件中:

Visual Studio 2017\Templates\ProjectTemplates和(我的)文档目录文件夹的Visual Studio 2017\My exports Templates。

Visual Studio使用位于ProjectTemplates中的模板,我导出的模板用作备份。

这个模板现在将由Visual Studio在新项目开始时使用。

同样,在对话框中对项目进行重命名将自动反映在为默认名称空间生成的项目和项目名称(DLL)中,另一方面,脚本中加载的DLL的名称将保持不变。

为了在脚本中反映项目的名称,我们需要编辑文件:start.scr和模板配置文件:My template.vstemplate位于:

Visual Studio 2017\Templates\ProjectTemplates\AutoCAD 2020 Plugin.zip。

解压AutoCAD 2020 Plugin.zip的内容,并在文本编辑器中打开start.scr。

替换:

netload "Acad2020Plugin.dll"

为:

netload " .dll"

不要忘记在脚本的最后留一个空格进行验证,保存更改,

在文本编辑器打开My Template.vstemplate文件(它是一个XML文件)并替换:

<ProjectItem ReplaceParameters="false" TargetFileName="start.scr">start.scr</ProjectItem>

by:

<ProjectItem ReplaceParameters="true" TargetFileName="start.scr">start.scr</ProjectItem>

您还可以添加框架的版本,以确保Visual Studio在选择该版本的框架时提供该模板,请添加:

<RequiredFrameworkVersion>4.6</RequiredFrameworkVersion>

在标签之后:[[ Next html is not allow: <Description> ]]。

最后,文件的内容应该是这样的:

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">  <TemplateData>    <Name>AutoCAD 2020 Plugin</Name>    <Description>template for AutoCAD 2020 Custom Command</Description>    <RequiredFrameworkVersion>4.7.1</RequiredFrameworkVersion>    <ProjectType>CSharp</ProjectType>    <ProjectSubType>    </ProjectSubType>    <SortOrder>1000</SortOrder>    <CreateNewFolder>true</CreateNewFolder>    <DefaultName>AutoCAD 2020 Plugin</DefaultName>    <ProvideDefaultName>true</ProvideDefaultName>    <LocationField>Enabled</LocationField>    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>    <Icon>__TemplateIcon.ico</Icon>  </TemplateData>  <TemplateContent>    <Project TargetFileName="Acad2020Plugin.csproj" File="Acad2020Plugin.csproj"              ReplaceParameters="true">      <ProjectItem ReplaceParameters="true"                    TargetFileName="MyCommands.cs">MyCommands.cs</ProjectItem>          <Folder Name="Properties" TargetFolderName="Properties">            <ProjectItem ReplaceParameters="true"                        TargetFileName="AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>          </Folder>      <ProjectItem ReplaceParameters="true"                    TargetFileName="start.scr">start.scr</ProjectItem>    </Project>  </TemplateContent></VSTemplate>

保存更改并使用更改的文件重新创建AutoCAD 2020 Plugin.zip存档。替换Visual Studio 2017\Templates\ProjectTemplates.中的旧归档。

结论

同样的过程可以用于创建其他模板,目标是AutoCAD和/或框架的其他版本,或者用于其他类型的项目(LISP函数、类库、应用程序扩展……)。

可以在启动命令时在文件start.scr中添加指令。

还可以在命令行参数(项目属性的debug选项卡)中指定要打开的DWG文件,并使用完整或相对路径(根目录是输出目录)。

例子:

"Drawing1.dwg" /nologo /b "start.scr"(2020版本不需要)

相关推荐

迅雷无法下载的链接用什么下载

1.可以使用其他下载工具代替迅雷。2.迅雷可能无法下载的原因有很多,比如网络问题、软件故障等。其他下载工具可以提供类似的功能,但可能具有更好的稳定性和兼容性。3.一些常见的替代迅雷的下载工具包括...

apple官方网站(apple官方网站旗舰店)

1、首先打开浏览器,输入https://www.apple.com/;2、即可浏览苹果官网。 苹果公司(AppleInc.)是美国一家高科技公司。由史蒂夫·乔布斯、斯蒂夫·沃兹尼亚克和罗·韦恩(R...

哪些手机用鸿蒙系统(都什么手机能用鸿蒙系统)

截至目前,国内有以下几款手机品牌可以装鸿蒙系统:1.华为:华为Mate40系列、P40系列、Mate30系列、MatePadPro系列等。2.荣耀:荣耀V40、荣耀30系列、荣耀X10系列等...

手机u盘读不出来了怎么修复(手机u盘读取不出来)

1、手机不支持OTG功能,所以将U盘连接到手机后,手机无法识别U盘的内容,因此显示不了;这种情况只能换台支持OTG功能的手机来连接U盘才行。2、手机支持OTG功能,但是使用的OTG线质量有问题导致无法...

笔记本散热器买哪种好(笔记本散热器买哪种好贴吧)

散热器有十大品牌:九州风神、超频三,酷冷至尊Tt、AVC、思民、捷冷、安钛克Antec、安耐美Enermax、海盗船Corsair。能位列十大品牌,每一种的质量和功能都有保障。、目前网上销量最高的是九...

打印机驱动一直安装失败(打印机驱动一直安装失败怎么办)
打印机驱动一直安装失败(打印机驱动一直安装失败怎么办)

打印机驱动程序安装失败需要对电脑进行其他设置,详细步骤如下:1,在电脑桌面上找到【计算机】并用鼠标右击。2,右击后在出现的选项中找到【管理】选项并点击打开。3,接下里会进入到计算机控制台界面,在这里要根据自己的电脑选择64位或者32位,选择...

2026-01-14 12:55 liuian

ctrl加谁是截图(ctrl和什么键可以截图)

第一种:Ctrl+PrScrn使用这个组合键截屏,获得的是整个屏幕的图片第二种:Alt+PrScrn这个组合键截屏,获得的结果是当前窗口的图片第三种:打开qq,使用快捷键Ctrl+...

技嘉主板bios设置启动顺序(技嘉主板bios设置启动顺序怎么设置)

启动顺序设置方法如下:1、重启电脑连续按[DEL]键进入BIOS设置,按DEL进入BIOS设置。2、按键盘方向键右键切换到BOOT选项,将windows10功能设置为"其它操作系统"...

目前台式电脑主机怎么选(台式主机选择)
目前台式电脑主机怎么选(台式主机选择)

每个人对电脑的性需要不同,因此根据自己家的家庭需要,选择合适的电脑即可。以下简单说明:1,双核处理器+2G内存+集成显卡+机械硬盘。性能满足上网、看电影、聊天、办公、玩象棋之类的小游戏。价格在2000以内可以买到;2,四核处理器+4G内存+...

2026-01-14 12:05 liuian

台式电脑如何用u盘重装系统(台式电脑如何用u盘重装系统应用)

1、重启电脑并进入BIOS;2、在BIOS中设置启动顺序,优先从U盘启动;3、从U盘启动,进入安装界面;4、选择安装语言、时区和键盘设置;5、选择安装方式,一般选择“清除整个硬盘并安装”;6、配置分区...

宏基笔记本电脑怎么恢复出厂设置
  • 宏基笔记本电脑怎么恢复出厂设置
  • 宏基笔记本电脑怎么恢复出厂设置
  • 宏基笔记本电脑怎么恢复出厂设置
  • 宏基笔记本电脑怎么恢复出厂设置
stop0x0000007b蓝屏(stop0X0000007b蓝屏,修改注册表)
stop0x0000007b蓝屏(stop0X0000007b蓝屏,修改注册表)

步骤/方式1将电脑送到当地的维修店步骤/方式2然后将师傅维修一下蓝屏的问题当电脑启动蓝屏出现错误代码0x0000007b时,首先我们将电脑重启,在开机时不停按启动热键进入到bios设置页面,进入页面后找到“IntegratedPeriphe...

2026-01-14 11:21 liuian

电脑开机安全模式也进不去(电脑开机安全模式也进不去桌面)
  • 电脑开机安全模式也进不去(电脑开机安全模式也进不去桌面)
  • 电脑开机安全模式也进不去(电脑开机安全模式也进不去桌面)
  • 电脑开机安全模式也进不去(电脑开机安全模式也进不去桌面)
  • 电脑开机安全模式也进不去(电脑开机安全模式也进不去桌面)
怎样设置默认打印机(打印机设置彩色打印在哪里设置)

步骤如下:1.单击Windows“开始”菜单,指向“设置”,单击“打印机”,打开“打印机”窗口。2.右键单击打印机图标,系统弹出快速菜单,单击其中的“设为默认值”。如果“打印机”窗口没有当前使用的打印...

机械硬盘坏了能修吗(机械硬盘损坏可以修复吗)

硬盘修复是很多人都可能会面临的难关。硬盘是计算机上最重要的组成部分,是计算机上的数据存储设备,因此一旦硬盘发生故障,用户很可能会丢失所有数据。况且硬盘是机械设备,有一定的使用寿命,长时间使用出现故障...