Ответ 1
В терминах "что в коробке" вы можете использовать его только наоборот, используя API ModuleDefinition.Import
.
Чтобы перейти от TypeReference
к System.Type
, вам нужно будет вручную просмотреть его с помощью Reflection и AssemblyQualifiedName
. Имейте в виду, что Cecil использует соглашения IL для выхода из вложенных классов и т.д., Поэтому вам нужно применить некоторую ручную коррекцию.
Если вы хотите разрешить не общие, не вложенные типы, вы должны быть в порядке.
Чтобы перейти от TypeReference
к a TypeDefition
(если это то, что вы имели в виду), вам нужно TypeReference.Resolve();
Запрошенный пример кода:
TypeReference tr = ...
Type.GetType(tr.FullName + ", " + tr.Module.Assembly.FullName);
// will look up in all assemnblies loaded into the current appDomain and fire the AppDomain.Resolve event if no Type could be found
Соглашения, используемые в Reflection, объясняются здесь , поскольку соглашения Cecils касаются исходного кода Cecil.