Словил сегодня такое исключение при отладке одного из проектов:
An exception of type 'System.TypeLoadException' occurred in <my_dll_name>.dll but was not handled in user code
Additional information: Не удалось загрузить тип "Autodesk.AutoCAD.Runtime.LispDataType" из сборки "accoremgd, Version=20.1.0.0, Culture=neutral, PublicKeyToken=null". occurred
Если вдруг встретите такое, то:
1. В проекте используются ссылки на библиотеки AutoCAD до 2014 версии включительно.
2. Запускать пытаетесь в AutoCAD версии 2015 и выше.
3. Где-то в сборке явно используется этот тип (Autodesk.AutoCAD.Runtime.LispDataType). Например - в типе параметра метода:
public static bool TestForCode(TypedValue tVal, LispDataType code, out object value)
{
value = tVal.Value;
return tVal.TypeCode == (short)code;
}
Проблема в том, что до 2015 версии LispDataType был описан в AcCoreMgd.dll, а начиная с 2015 версии - в AcDbMgd.dll.
Варианты решений:
1. Пересобрать с использованием библиотек AutoCAD 2015+.
2. Переписать методы и их вызовы таким образом, чтобы тип перечисления явно не указывался, например:
public static bool TestForCode(TypedValue tVal, short code, out object value)
{
value = tVal.Value;
return tVal.TypeCode == code;
}
А вызвать таким образом:
TestForCode(argsArray[0], (short)LispDataType.Text, out object nameTmplObj)
Я так понимаю, что при компиляции в этом случае перечисление будет заменено на числовой эквивалент и данные о типе этого перечисления не будут сохраняться в сборке.
Что самое печальное, я не смог найти нигде в официальной (да и неофициальной) документации хотя бы одно упоминание о такой "миграции" типа. Есть вероятность, что не только с этим перечислением так произошло...