# com.cad.script 库模块帮助文档

[C# 短脚本](https://www.aardio.com/zh-cn/docs/library/com/cad/csharp-scripts.html)

## com.cad.script 成员列表 <a id="com.cad.script" href="#com.cad.script">&#x23;</a>

AutoCAD .NET8+ 短脚本宿主。复用 com.cad.task，不依赖Autos、不新建IPC，不是沙箱或完整热卸载机制。

### com.cad.script.create(cad,source,args,doc,options) <a id="com.cad.script.create" href="#com.cad.script.create">&#x23;</a>
创建但不提交C#任务，显式传入原增强cad并绑定doc；不从doc.Application重取宿主。source为完整C#源码或.cs文件，args为JSON数据。  
成功返回任务对象，先保存path再submit；失败null,err。  
固定入口：public static object Script.Execute(Document doc, Database db, Editor ed, Transaction tr, JsonElement args)。  
options沿用任务timeout/method/directory/nudge；另有hostDirectory/sdkOptions。  
首次宿主加载与NetLoad共用内部实现，CAD提示由用户处理；完成加载与设置恢复后才执行脚本。  

[返回对象:comCadCSharpTaskObject](#comCadCSharpTaskObject)

### com.cad.script.open(path,doc) <a id="com.cad.script.open" href="#com.cad.script.open">&#x23;</a>
重开原C#任务，read/wait解析脚本回执；省略doc可离线读取，不准备SDK或重新提交。  

[返回对象:comCadCSharpTaskObject](#comCadCSharpTaskObject)

### com.cad.script.prepare(app,options) <a id="com.cad.script.prepare" href="#com.cad.script.prepare">&#x23;</a>
编译或复用小型常驻宿主，返回host,err,info；不会NETLOAD或修改信任设置。  
options可指定hostDirectory、sdkOptions。内部按实际CAD运行时选择Roslyn，缓存键包含源码/CAD引用/编译器版本。  
通常由run/create自动调用。

### com.cad.script.run(cad,source,args,doc,options) <a id="com.cad.script.run" href="#com.cad.script.run">&#x23;</a>
创建、单次提交并等待，返回result,err,task。  
检查result.ok；编译/入口/运行/结果编码错误由phase区分。  
timeout为等待快照，不取消或重发；task.path可用open恢复。  
编译失败无执行；宿主事务在结果编码成功后提交，异常时释放未提交事务。不得在脚本中自行Commit/Dispose宿主事务或切换文档。  
不承诺任意副作用回滚、强行停止代码或ALC必然回收。

### com.cad.script.stats(cad,collect,doc,options) <a id="com.cad.script.stats" href="#com.cad.script.stats">&#x23;</a>
经同一任务入口读取宿主运行时、引用数、ALC弱引用及内存快照。  
返回result,err,task；数据在result.data。collect默认false；true诊断性触发全局GC，可能暂停CAD，不用于日常每次调用。  
alive仅为当时尚存活的上下文数，不代表已定位GC根或泄漏内存大小。

## comCadCSharpTaskObject 成员列表 <a id="comCadCSharpTaskObject" href="#comCadCSharpTaskObject">&#x23;</a>

### comCadCSharpTaskObject.cancel() <a id="comCadCSharpTaskObject.cancel" href="#comCadCSharpTaskObject.cancel">&#x23;</a>
沿用执行前取消。不能停止已经开始执行的C#。

### comCadCSharpTaskObject.hostId <a id="comCadCSharpTaskObject.hostId" href="#comCadCSharpTaskObject.hostId">&#x23;</a>
固定宿主构建身份，不是每次业务程序集名。

### comCadCSharpTaskObject.id <a id="comCadCSharpTaskObject.id" href="#comCadCSharpTaskObject.id">&#x23;</a>
底层LISP任务ID。

### comCadCSharpTaskObject.nudge() <a id="comCadCSharpTaskObject.nudge" href="#comCadCSharpTaskObject.nudge">&#x23;</a>
显式沿用任务队列刷新；可能阻塞，默认不调用。

### comCadCSharpTaskObject.path <a id="comCadCSharpTaskObject.path" href="#comCadCSharpTaskObject.path">&#x23;</a>
C#任务回执目录，应在submit前保存。

### comCadCSharpTaskObject.read() <a id="comCadCSharpTaskObject.read" href="#comCadCSharpTaskObject.read">&#x23;</a>
读取并解码C#结果，返回result,err；不访问CAD。result.ok表示传输及C#均成功。

### comCadCSharpTaskObject.requestPath <a id="comCadCSharpTaskObject.requestPath" href="#comCadCSharpTaskObject.requestPath">&#x23;</a>
UTF-8 JSON源码/参数请求文件；提交后不可修改，宿主验证SHA256。

### comCadCSharpTaskObject.submit(doc) <a id="comCadCSharpTaskObject.submit" href="#comCadCSharpTaskObject.submit">&#x23;</a>
委托现有任务协议，最多提交一次；重开任务需传入原doc。超时不重放。

### comCadCSharpTaskObject.target <a id="comCadCSharpTaskObject.target" href="#comCadCSharpTaskObject.target">&#x23;</a>
原文档与CAD实例身份快照。

### comCadCSharpTaskObject.wait(timeout) <a id="comCadCSharpTaskObject.wait" href="#comCadCSharpTaskObject.wait">&#x23;</a>
等待并解码C#回执；0只读快照。超时不会中断代码/撤销加载/回滚。
