В многочисленных местах делают я встречаюсь с частично квалифицированными именами типов формы FullTypeName, AssemblyName
, т.е. как Type.AssemblyQualifiedName
только без версии, культуры и publicKeyToken спецификаторов.
Мой вопрос состоит в том, как можно преобразовать его в соответствующее Type
в минимуме усилия? Я думал это Type.GetType
делает задание, но увы, оно не делает. Следующий код, например, возвраты null
:
Type.GetType("System.Net.Sockets.SocketException, System");
Конечно, если я определяю полностью определенное имя, оно действительно работает:
Type.GetType("System.Net.Sockets.SocketException, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
Большое спасибо.
Если DLL, в которой она находится, еще не загружена в домен приложения (например, вы ее использовали), вам нужен полный путь вот так, если он уже загружен, он может найти его в более короткой версии.
Чтобы ответить на ваш вопрос: вторая версия всегда работает, придерживайтесь ее, и у вас будет один способ побеспокоиться.
Код, работающий с короткой формой:
Assembly a = Assembly.LoadWithPartialName(assemblyName);
Type t = a.GetType(typeName);
, но LoadWithPartialName не рекомендуется, поэтому я думаю, вам следует придерживаться длинной формы.