使用Visual Studio 2017为AutoCAD创建一个c#模板
liuian 2025-09-09 04:37 2 浏览
本教程的目标是展示如何在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版本不需要)
相关推荐
- Html中Css样式Ⅱ_html+css+
-
元素的定位(方式五种定位方式):静态定位:position:static;相对定位:position:relative;绝对定位:position:absolute;固定定位:position...
- HTML 标签和属性值的基本格式_html标签及属性的语法规则
-
HTML:HyperTextMarkupLanguage超文本标记语言HTML代码不区分大小写,包括HTML标记、属性、属性值都不区分大小写;任何空格或回车键在代码中都无效,插入空格或回车有...
- C#中使用Halcon开发视觉检测程序教程
-
一、环境准备1.安装Halcon从Halcon官方网站下载适合你操作系统的安装包,按照安装向导完成安装。安装过程中,记住安装路径,后续配置环境时会用到。2.配置VisualStudio项目打开V...
- 【开源】C#功能强大,灵活的跨平台开发框架 - Uno Platform
-
前言今天给广大网友分享一个基于C#开源、功能强大、灵活的跨平台开发框架,她就是:UnoPlatform。通过UnoPlatform,开发者可以利用单一代码库实现多平台兼容,极大地提高了开发效率和...
- C# 的发展简史_c#的发展前景
-
1.C#的诞生和初期(2000-2005)2000年:在微软的PDC大会上,由AndersHejlsberg首次公开展示了C#语言。2002年:微软发布了.NETFramework1.0,其...
- Visual Studio 2010-C#跟西门子1200(Sharp7)窗体控制②-启动按钮
-
VisualStudio2010--C#跟西门子1200(Sharp7)窗体控制②--启动按钮上期回顾(上期主要是新建窗体应用程序,添加sharp7的类库并引用,建立一个button按钮):本期将...
- Visual Studio窗口布局混乱后的恢复与优化指南
-
在使用VisualStudio进行开发时,我们常因误操作(如拖拽窗口、关闭面板、多显示器切换)导致界面布局混乱,代码编辑器、解决方案资源管理器、属性面板等组件“错位”,严重影响开发效率。本文将针对布...
- 使用Visual Studio 2017为AutoCAD创建一个c#模板
-
本教程的目标是展示如何在VisualStudio2017中创建AutoCAD的c#项目模板,该模板允许在调试模式下从VisualStudio加载DLL来自动启动AutoCAD。本文展示的示例使用...
- IT科技-续3Visual Studio2019-C#实战练习
-
上次完成了登录页面的窗体设计,本次完成管理界面的设计。第一步ComBox控制深度操作点击编辑选项,加入预定选项,完成操作。第二步复制Buttons控件依次为保存、删除、重置、编辑按钮属性设置,参考...
- 如何在 C# 中将文本转换为 Word 以及将 Word 转换为文本
-
在现代软件开发中,处理文档内容是一个非常常见的需求。无论是生成报告、存储日志,还是处理用户输入,开发者都可能需要在纯文本与Word文档之间进行转换。有时需要将文本转换为Word,以便生成结构化的...
- 简短的C#入门教程 # C# 入门教程 C#(读作...
-
简短的C#入门教程#C#入门教程C#(读作CSharp)是一种由Microsoft开发的多范式编程语言,它具有广泛的应用,特别是在Windows平台上。本教程将介绍C#的基础知识,以帮助您入门这...
- JavaScript中this指向各种场景_前端中this的指向
-
在JavaScript中,this的指向是一个核心概念,其值取决于函数的调用方式,而非定义位置(箭头函数除外)。以下是this指向的常见场景及具体说明:1.全局作用域中的this在全局作用域(非...
- 微信WeUI设计规范文件下载及使用方法
-
来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。WeUI是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信Web开发量身设计,可以令用户的使用感知...
- JavaScript技术:如何动态添加事件?
-
随着前端技术的不断发展,JavaScript已经成为了不可或缺的一部分,它可以让网页变得更加流畅和美观。但是,在JavaScript中动态添加事件还是一个比较困难的问题,为此,本文将从入门到精通,介绍...
- 一周热门
-
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
飞牛OS入门安装遇到问题,如何解决?
-
系统C盘清理:微信PC端文件清理,扩大C盘可用空间步骤
-
10款高性能NAS丨双十一必看,轻松搞定虚拟机、Docker、软路由
-
- 最近发表
-
- Html中Css样式Ⅱ_html+css+
- HTML 标签和属性值的基本格式_html标签及属性的语法规则
- 基于Visual Studio C#语言开发上位机,做定制设计后有多好看
- C#中使用Halcon开发视觉检测程序教程
- 【开源】C#功能强大,灵活的跨平台开发框架 - Uno Platform
- C# 的发展简史_c#的发展前景
- Visual Studio 2010-C#跟西门子1200(Sharp7)窗体控制②-启动按钮
- Visual Studio窗口布局混乱后的恢复与优化指南
- 使用Visual Studio 2017为AutoCAD创建一个c#模板
- IT科技-续3Visual Studio2019-C#实战练习
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)