Добрый день!
Суть проекта - выполнение исходного кода на C# в AutoCAD (динамическая компиляция и всё такое...).
Есть сборка на C# с классом от IExtensionApplication. Грузится в AutoCAD при его запуске (через реестр).
В ней в Initialize и DocumentManager_DocumentCreated подписываемся на нужные события. Здесь ничего особенного...
В итоге имеем обработчики событий типа
doc.CommandEnded += Doc_CommandEnded;
В таких обработчиках код типа:
compile_and_load_module(ctx);
В ctx всякие параметры для компиляции - пути к исходникам, пути к ссылкам, тип, запускаемый метод и т.п.
compile_and_load_module выполняет компиляцию исходников (CSharpCodeProvider.CompileAssemblyFromFile), сохраняет сборку на диске, загружает её в текущий AppDomain (т.е. в AutoCAD), ищет тип (из ctx) и выполняет метод (из ctx).
Скомпилированный метод делает какую-либо полезную работу, например вызывает другие команды AutoCAD...
var dm = Application.DocumentManager;
var doc = dm.MdiActiveDocument;
var ed = doc.Editor;
ctx.acad_dwg.Editor.WriteMessage("Перед Editor.Command() 5 ...");
await dm.ExecuteInCommandContextAsync(async (obj) =>
{
ed.WriteMessage("10000000000000000...");
ed.Command("_ATTSYNC", "_N", n);
ed.WriteMessage("20000000000000000...");
},
null
);
Вызов команды я пытался сделать и как await ed.CommandAsync и через ExecuteInCommandContextAsync и без неё.
Читал
http://through-the-interface.typepad.com/through_the_interface/2014/03/autocad-2015-calling-commands.html и
http://through-the-interface.typepad.com/through_the_interface/2015/03/autocad-2016-calling-commands-from-autocad-events-using-net.html и много чего ещё.
Там написано, что так всё должно работать и работает, но у меня не работает. Возможно это из-за более длинной цепочки компиляции, загрузки, выполнения и т.п. Раньше это всё у меня работало через acedCmd...
Может кто-нибудь подскажет куда копать?..