¿Hay alguna forma de pasar de una TypeReference en Mono.Cecil a un Type?Mono.Cecil TipoReferencia al tipo?
Respuesta
En términos de "lo que está en la caja", solo puede tenerlo al revés, utilizando la API ModuleDefinition.Import
.
Para pasar de TypeReference
a System.Type
, deberá buscarlo manualmente utilizando Reflection y el AssemblyQualifiedName
. Tenga en cuenta que Cecil usa las convenciones de IL para escapar de las clases anidadas, etc., por lo que debe aplicar alguna corrección manual.
Si solo quiere resolver tipos no genéricos y no anidados, debería estar bien.
pasar de una TypeReference
a un TypeDefition
(si eso es lo que quería decir) lo que necesita para TypeReference.Resolve();
solicitada código de muestra:
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
Las convenciones utilizadas en la reflexión se explican here , para las convenciones de Cecils, consulte el Código fuente de Cecil.
Para los tipos genéricos se necesita algo como esto:
public static Type GetMonoType(this TypeReference type)
{
return Type.GetType(type.GetReflectionName(), true);
}
private static string GetReflectionName(this TypeReference type)
{
if (type.IsGenericInstance)
{
var genericInstance = (GenericInstanceType)type;
return string.Format("{0}.{1}[{2}]", genericInstance.Namespace, type.Name, String.Join(",", genericInstance.GenericArguments.Select(p => p.GetReflectionName()).ToArray()));
}
return type.FullName;
}
Tenga en cuenta que este código no maneja tipos anidados, por favor marque la respuesta @JohannesRudolph para este
- 1. Mono.Cecil algo como Type.GetInterfaceMap?
- 2. Mono.Cecil tipo.IsAssignableFrom (derivedType) equivalent
- 3. Mono.Cecil: llame al método GENERIC base class 'de otro ensamblado
- 4. ¿Agregar atributos personalizados usando mono.cecil?
- 5. Encontrando ensamblajes de jerarquía de tipos utilizando Mono.Cecil
- 6. Mono.Cecil Excepción lanzada al analizar .NET versión 4.5 de System.Xml DLL, ¿por qué?
- 7. CCI vs. Mono.Cecil: ventajas y desventajas
- 8. ¿Qué significan estas propiedades en Mono.Cecil?
- 9. ¿Mono.Cecil se encarga de las sucursales, etc. ubicación?
- 10. ¿Cómo crear un método de anulación usando Mono.Cecil?
- 11. tipo Haskell vs. newtype con respecto al tipo de seguridad
- 12. ¿Puede Mono.Cecil modificar el código ya cargado en el dominio de la aplicación?
- 13. Genéricos y convertir al tipo de derecho
- 14. Fancybox tipo iframe valor devuelto al cerrar
- 15. Puntero al tipo propio en struct?
- 16. Scala tipo de retorno al extender colección
- 17. Agregar tipo mime al enlace HTML
- 18. llamar al constructor de un tipo genérico
- 19. Al utilizar macros tipo función en C
- 20. Transmisión desde la interfaz al tipo subyacente
- 21. Unirme al tipo anónimo en LINQ
- 22. convirtiendo jdouble al doble del tipo c
- 23. Lanzando una colección genérica al tipo base
- 24. ¿Puede un tipo ser un tipo de referencia y un tipo de valor al mismo tiempo?
- 25. Error de tipo de inferencia/comprobación de tipo al utilizar cálculos de tipo de nivel
- 26. Cómo agrego un atributo personalizado sin un constructor predeterminado usando mono.cecil
- 27. objeto de tipo 'customObject' no se puede convertir al tipo 'customObject'
- 28. Enlace de marcado XAML al diccionario con la clave del tipo Tipo
- 29. no pudo convertir valor de la propiedad del tipo java.lang.String al tipo requerido doble
- 30. CRM Recuperar entidad - Error: No se puede convertir objeto de tipo 'Microsoft.Xrm.Sdk.Entity' al tipo 'CRMEntities.List'
También tenga en cuenta que no se construye Mono.Cecil sobre System.Reflection (siendo una biblioteca independiente), eso significa que no hay una forma directa de convertirlos entre sí. Deberías poder hacer eso, pero no se verá bien. – ShdNx
Entonces, ¿con qué reflexión buscaría el tipo? ¿Y tiene un ejemplo de un tipo anidado de reflexión y un tipo anidado cecil? – Will
En lugar de agregar manualmente ",", puede usar Assembly.CreateQualifiedName (tr.Module.Assembly.FullName, tr.FullName). – user276648