C# 开发CAD注意事项(一)
小白开发CAD
开始学习CAD开发了,小白学习中难免遇到很多问题,随手记录一下。
1.eLockViolation错误
开发CAD右键菜单运行时,报eLockViolation错误
需要修改非模态窗口文档内容或者数据库,以写入方式打开,需要先进行文档的锁定,但是我在使用时,在using之后加了个分号,所以后面花括号的文档没有锁定,文档锁定被using释放掉了。
using (DocumentLock docLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument())
{
//干活
}
若只读取文档的数据,不需要锁定文档。
2.查看CAD支持的.NET的版本
在CAD安装目录下,找到”acad.exe.config”文件,查看Version的版本即可。
3.连接Access数据库字符串
在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错:
连接字符串的问题。采用Microsoft.Jet.OleDb.4.0,可以读取excel2007以前的版本,在客户机上不需要部署office,采用Microsoft.Ace.OleDb.12.0的时候,需要安装引擎。
Microsoft.ACE.OLEDB连接字符串参考地址:
https://www.connectionstrings.com/ace-oledb-12-0/
//access低版本用:
conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbpath + ";User Id=;Password=;";
//高版本用:
conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+ mdbpath + ";User Id=;Password=;";
设置好链接字符串之后,Access需要安装数据库引擎,Microsoft Access Database Engine 2016 Redistributable,下载地址为:
https://www.microsoft.com/en-us/download/details.aspx?id=54920
4. C# cad 未能完成程序集的安装
解决办法:
- 平台版本与启动的CAD版本不一致,右击项目->点击属性,查看调试选项中平台版本与启动的CAD程序平台是否相同。
- 查看解决方案的属性里中,配置属性里面对应项目的配置与平台是否与生成的配置和平台相对应。
都一致之后,就可以启动CAD,输入“netload”调用dll类库。
5.将低版本C# CAD程序改成高版本CAD程序和高版本.Net框架
- 首先对每一个项目属性里面的目标框架改成与高版本CAD匹配的.NET版本
- 然后选择生成里面,将配置和目标平台都调整一下,如调到x64位版本;
- 在主启动项目里面,右击属性,选择调试对话框,将启动外部程序调整为CAD启动目录,将工作目录调整为CAD目录下的UserDataCache隐藏文件夹。
- CAD版本提高,意味着每一个项目里面引用的CAD dll动态库也要变化
- 然后凡是引用AutoCAD和AXDBLib文件的,在添加引用里面,COM选项夹选择AutoCAD 2013 Type Library,选择chs结尾的中文库即可,然后再选择选择AutoCAD/ObjectDBX Common 19.0 Tyep Library,同样,选择chs中文库即可。
- 最后再库文件中引用
Using AutoCAD;
- 调试过程中有一些互操作类型错误的引用,需要将其属性中的“嵌入互操作类型”值改为“False”即可。
- 还有一些引用,引用的第三方库,比如“System.Data.SQLite”“NetTopologySuite”等,需要重新下载高版本的dll动态库,重新引用一下即可。
- 引用中,直接引用的DAO的,需要改成Microsoft.Office.Interop.Access.Dao
并在文件中引用
using DAO=Microsoft.Office.Interop.Access.Dao;
- 最后,有些类库只有32位,如ArcGIS,这类项目需要删除。