¿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 tipo.IsAssignableFrom (derivedType) equivalent
- 2. Mono.Cecil algo como Type.GetInterfaceMap?
- 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. Agregar tipo mime al enlace HTML
- 14. Transmisión desde la interfaz al tipo subyacente
- 15. Unirme al tipo anónimo en LINQ
- 16. Scala tipo de retorno al extender colección
- 17. Genéricos y convertir al tipo de derecho
- 18. Lanzando una colección genérica al tipo base
- 19. Fancybox tipo iframe valor devuelto al cerrar
- 20. llamar al constructor de un tipo genérico
- 21. Puntero al tipo propio en struct?
- 22. Al utilizar macros tipo función en C
- 23. convirtiendo jdouble al doble del tipo c
- 24. Error de tipo de inferencia/comprobación de tipo al utilizar cálculos de tipo de nivel
- 25. ¿Puede un tipo ser un tipo de referencia y un tipo de valor al mismo tiempo?
- 26. Cómo agrego un atributo personalizado sin un constructor predeterminado usando mono.cecil
- 27. ¿Qué tipo de datos Java corresponde al tipo de datos Oracle SQL NUMERIC?
- 28. objeto de tipo 'customObject' no se puede convertir al tipo 'customObject'
- 29. CRM Recuperar entidad - Error: No se puede convertir objeto de tipo 'Microsoft.Xrm.Sdk.Entity' al tipo 'CRMEntities.List'
- 30. Error al consumir servicio: el tipo de nombre 'AAA' no existe en el tipo 'YYY.YYY'
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