Аналог vlax-product-key на .NET

Есть в лиспе прекрасная функция - (vlax-product-key), возвращает значение вида

1
"Software\\Autodesk\\AutoCAD\\RXX.X\\ACAD-XXXX:XXX"

Поставили мне задачку найти такое же, но на .NET. Чтобы не забыть - помещаю здесь. Кода - на одну строчку:

1
Autodesk.AutoCAD.Runtime.SystemObjects.DynamicLinker.ProductKey;

Естественно, что .NET-проект создается в полном соответствии с требованиями Autodesk: подключаются *mgd.dll, импортируются соответствующие пространства имен и т.д.

.NET-сборки для AutoCAD разных версий, часть 2

Не удалось мне полностью решить вопрос с единым проектом .NET-сборок для разных версий AutoCAD :( Поэтому пришлось выкручиваться и задачу решать более извращенным методом.

Конструктивная критика с показом альтернативных решений приветствуется :)
Далее

.NET сборки для AutoCAD под разные версии

Как любой человек, я ленив. Да, я лентяй. Мало того - я горжусь тем, что я лентяй. Мне действительно лень по сотне раз писать один и тот же код. Мне действительно лень потом его в сотне мест править.
Далее

Русский .NET для AutoCAD (и не только)

Два (не, почти три!) дня был лишен сетки (по почти независящим от меня причинам). И тут о радость! Сетка восстановлена, я "снова здесь, я в бархатных штанах". И еще бОльшая радость - Андрей Бушман, оказывается, снова запустил свой сайт!

Я уж и надежду потерял, все время рыскал по официальной документации, плевался, матерился - а что делать, если чуть ли не единственный русскоязычный ресурс закрыт был?!

Так вот, предупреждаю - дизайн изменен, информации добавлено море, берите и пользуйтесь, как говорится :)

Тешу себя слабой надеждой, что Андрей все же не закроет этот ресурс, как обещал...

Имя текущего профиля и прочие Preferences

В очередной раз приношу самую искреннюю благодарность Андрею Бушману - без него я бы точно не разобрался в этой задачке.
Далее

Выполнение кода сразу после загрузки .NET-dll

Иногда бывает необходимо до вызова команд (а еще лучше - прямо после загрузки кода) выполнить некоторые действия: установить системные переменные, установить пути поддержки и т.п.). В лиспе это просто:

1
2
3
4
5
6
(defun test()
  (alert "test")
  )

;; А вот и выполнение
(test)

Это то, что в лиспе часто называют "самовызовом". Выполнение кода начинается сразу после загрузки соответствующего lsp-файла в память.

Механизм достаточно удобный, несмотря на некоторые трудности, описанные здесь и здесь.

С .NET ситуация немного иная.

Далее

Создание записей в таблицах стилей, слоев и т.п.

Как показала практика, приведенный пример не совсем жизнеспособен. Он прекрасно будет работать только в том случае, если в файле либо уже существует указанный текстовый стиль (и тогда выполняется его модификация), либо в файле с момента его открытия этого стиля еще не существовало.
Если же стиль был создан, а потом удален, то строка

вернет true, несмотря на то, что стиль имеет свойство IsErased = true. Что же делать?
Далее