На 18 строчке в 2016 автокаде выскакивает ошибка eSetFailed. При этом имя для листа корректное и в 15 строчке я получаю идентификатор созданного листа.
В начальном коде у тебя скорее всего путаница с открытием/закрытием объектов.
1. using var curT = curDb.TransactionManager.StartTransaction(); а где вызов curT.Dispose(), после curT.Commit();?
но причина не в этом.
2. var layoutDic = curDb.LayoutDictionaryId.GetObjectAs<DBDictionary>();
var newLayout = newLayoutId.GetObjectAs<Layout>(true);
ты открыл объект на чтение, а второй на запись вне транзакции, через id.Open()
скорее всего метод var newLayoutId = LayoutManager.Current.CreateLayout(layoutName); вернул id, но ожидает, когда ты вернешь ему layoutDic
соответственно попробуй для начала заменить
var layoutDic = curT.GetObjectAs<DBDictionary>(curDb.LayoutDictionaryId);
var newLayout = curT.GetObjectAs<Layout>(newLayoutId, true);
и добавить Dispose() для транзакции.
если не поможет, попробуй
var layoutDic = curT.GetObjectAs<DBDictionary>(curDb.LayoutDictionaryId, true);
Если не поможет, попробуй после var newLayoutId = LayoutManager.Current.CreateLayout(layoutName);
закрыть транакцию curT.Commit(); curT.Dispose();
и проверить:
LayoutManager.Current.GetLayoutId(layoutName)
LayoutManager.Current.SetCurrentLayoutId(newLayoutId);
если не поможет ищи в коде где еще открывал объекты через Id.GetObjectAs и закрывай