# AutoCADDotNet **Repository Path**: yaojing38/AutoCADDotNet ## Basic Information - **Project Name**: AutoCADDotNet - **Description**: 提供AutoCAD二次开发,.net需要使用的ObjectARX包。 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2023-05-31 - **Last Updated**: 2023-11-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AutoCADDotNet 提供`AutoCAD`二次开发`.Net`需要使用的`ObjectARX`包。 ## 快速使用 ```xml net461 ``` - 不考虑`AutoCAD2009`及以下的版本。 - 当使用`TargetFramework`为`net35`及以下时,适用于`AutoCAD2010-2012`版本。 - 当使用`TargetFramework`为`net40`及以上时,适用于`AutoCAD2013`及以上版本。 - 提供`MSBuild`属性常用值。 ## 功能 #### `AutoCAD2010-2012`版本 当使用`TargetFramework`为`net35`及以下时,提供`ObjectARX2010`包中的`AcMgd.dll`等依赖,和包中的`x64`的`Autodesk.AutoCAD.Interop.dll`,及`ObjectARX2018`包中的`xml`注释文档。且这些依赖不会复制到生成目录下。 #### `AutoCAD2013`及以上版本 当使用`TargetFramework`为`net40`及以上时,提供`ObjectARX2013`包中的`AcMgd.dll`等依赖,和包中的`x64`的`Autodesk.AutoCAD.Interop.dll`,及`ObjectARX2018`包中的`xml`注释文档。**并提供`Microsoft.CSharp`的引用**。且这些依赖不会复制到生成目录下。 #### 提供`MSBuild`属性常用值 项目`csproj`中不用提供下方的属性,已由`AutoCADDotNet`包提供。 ```xml true true true None ``` ## 插件编译知识 ### 版本图 ![ObjectARX版本](/docs/img/ObjectARX%E7%89%88%E6%9C%AC.png) ### 如何选择`.NET Framework`版本? 请查看**上图最后一行的文字**,其中`2.0`和`4.0`指[CLR 版本](https://learn.microsoft.com/zh-cn/dotnet/framework/migration-guide/versions-and-dependencies)。也可以理解为,`.net`程序编译为`IL`代码,`2.0`和`4.0`为`IL`的版本。 `[CommandMethod("")]`采用的是`反射`的技术才能运行插件中的命令函数。`2.0CLR`和`4.0CLR`互不兼容,**不能相互使用反射的技术**,反射技术在同`CLR`版本不存在`.NET Framework`版本兼容的问题。主程序`AutoCAD`和插件程序可以任意设置同`CLR`版本的`.NET Framework`版本。 **结论**:`AutoCAD2006-2012`应采用`net35`编译插件,`AutoCAD2013+`可以使用任意的`net40+`的版本编译插件。 ### 如何选择`ObjectARX`开发包? 在测试`AutoCAD2013+`与`ObjectARX2013+`的关系时,任意的组合,都可以编译并执行成功,但运行`AutoCAD2013`没有的高版本`api`就会报错。`AutoCAD2006-2012`版本也遵循上面的道理,区别在于`AutoCAD2013+`的`api`**相对稳定**,而`AutoCAD2006-2012`的`api`相对不稳定。`AutoCAD2006-2012`**理论**上可以通用一个版本,但由于常用的`AutoCAD API`的不同,因此还需进一步拆分版本。 **经验性结论**:根据`AutoCAD API`的经验,`AutoCAD2013+`开发建议选择最低版本`ObjectARX2013`开发包。`AutoCAD2006-2012`可以根据`com`的版本划分进行拆分。 ### 如何选择的`com`版本? 使用`Autodesk.AutoCAD.Interop.AcadApplication`转到定义查看`GuidAttribute`的值相同的代表可以互相通用。 **结论**:不用区分`32位`和`64位`,`Autodesk.AutoCAD.Interop.Common.dll`和`Autodesk.AutoCAD.Interop.dll`的划分范围: - `AutoCAD2006`为一个范围。 - `AutoCAD2007-2009`为一个范围,可以互相通用。 - `AutoCAD2010-2012`为一个范围,可以互相通用。 - `AutoCAD2013+`为一个范围,可以互相通用。 ### 编译时与运行时 由于`acad.exe`**运行时**已经提供好了`ObjectARX`和`com`的环境了,因此可以不用把这些`dll`复制到生成目录下,但需要**编译时**提供`ObjectARX`和`com`的环境。 > 小知识:`ObjectARX`提供的`dll`反编译后是空壳子。 ### 测试时的特例 当开发 AutoCAD2012 时,必须使用`ObjectARX2012`,`net35`和`net40`都可以编译并执行成功。如果换成`ObjectARX2013`则不能成功。此特例不影响结论。 ## QQ 群 ![QQ群](/docs/img/AutoCADDotNetLibrary%E7%BE%A4%E4%BA%8C%E7%BB%B4%E7%A0%81.png)