Me gustaría analizar un nombre calificado de ensamblado en .NET 3.5. En particular, el conjunto en sí no está disponible, es solo el nombre. Puedo pensar en muchas formas de hacerlo a mano pero supongo que me puede faltar alguna característica para hacer eso en las bibliotecas del sistema. ¿Cualquier sugerencia?¿Nombre calificado del ensamblado de análisis?
Respuesta
La clase AssemblyName puede analizar el nombre del ensamblado, simplemente pase la cadena a su constructor. Si tiene un nombre de ensamblado calificado, creo que primero tendrá que eliminar la parte de tipo de cadena (es decir, todo hasta la primera coma).
Despojar el nombre suele ser muy complejo. Considere incluso la simple Tuple
El constructor AssemblyName arroja FileLoadException a menos que sea capaz de cargar el ensamblaje –
Echa un vistazo a la clase Path. Tiene un montón de funciones de análisis para nombres de archivos. O usted podría intentar:
string qualType = @"System.String, mscorlib, Version=2.0.0.0, Culture=neutral, publicKeyToken=b77a5c561934e089";
Type t = Type.GetType(qualType, false);
if (t == null)
{
Console.WriteLine("Invalid qualified type string.");
return;
}
Console.WriteLine(t.FullName);
Así que tienes algo como esto?
Assembly assem = Assembly.LoadFile("PathToTheAssembly.dll");
Type t = assem.GetType("Namespace.And.Type.Name");
t.FullName
Si usted está buscando para analizar la forma BNF, el ejemplo anterior utilizando GetType debe trabajar para usted.
EDIT: Ok, esto debería hacer lo que quiera suponiendo que tiene el nombre:
Assembly assem = Assembly.GetAssembly(Type.GetType(assembly_qualified_name, false));
if(assem != null)
{
byte[] pkt = assem.GetName().GetPublicKeyToken();
Version ver = assem.GetName().Version;
CultureInfo ci = assem.GetName().CultureInfo();
}
El ensamblado en sí no está disponible, por lo que no puedo utilizar Type.GetType. –
¿Tan solo el nombre del conjunto de cadenas? ¿Puedes publicar lo que realmente tienes? – SwDevMan81
Si ensamblado cargado se puede usar algo así:
Assembly assembly = Assembly.GetExecutingAssembly();
string assemblyName = assembly.GetName().Name;
En el ejemplo anterior he utilizado un ensamblaje en ejecución pero recorre su ensamblaje cargado.
Actualización: Siempre puede cargar un ensamble en un Dominio de aplicación diferente obtener el nombre del ensamblado y, una vez que haya terminado, descargarlo. Avíseme si necesita una muestra.
Bueno, precisamente, no tengo el conjunto a mano. Me gustaría analizar la cadena que representa su nombre. –
@Joannes, vea la parte de actualización en la respuesta. – Vadim
Hay una aplicación analizador en Mono y BNF grammar on MSDN
De .Net 4 y en la que tiene un nuevo reemplazo para Type.GetType:
public static Type GetType(
string typeName,
Func<AssemblyName, Assembly> assemblyResolver,
Func<Assembly, string, bool, Type> typeResolver,
bool throwOnError,
bool ignoreCase
)
Ver http://msdn.microsoft.com/en-us/library/ee332784%28v=vs.100%29.aspx
Lo que necesita do es en el ejemplo de la documentación anterior:
Type t2 = Type.GetType(test,
(aName) => aName.Name == "MyAssembly" ?
Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") :
Assembly.Load(aName),
(assem, name, ignore) => assem == null ?
Type.GetType(name, false, ignore) :
assem.GetType(name, false, ignore), true
);
Puede reemplazar las lambdas anteriores por funciones más complejas.
- 1. Necesita nombre de tipo calificado
- 2. Comportamiento diferente para la búsqueda de nombre calificado y no calificado para la plantilla
- 3. Obtener la ejecución del nombre del ensamblado usando la reflexión
- 4. Cómo cargar un tipo del nombre del tipo y el nombre del ensamblado
- 5. Nombre calificado en la declaración de espacio de nombres
- 6. Tipo de referencia con espacio de nombre parcialmente calificado
- 7. en un nombre de ensamblado cualificado pasado a Type.GetType()
- 8. ¿Cómo escribo el nombre calificado de un símbolo en Haskell?
- 9. Nombre de máquina totalmente calificado Java con/etc/hosts
- 10. No se pudo determinar de manera confiable el nombre de dominio totalmente calificado del servidor
- 11. Imitando la resolución del ensamblado del proceso msbuild
- 12. nameLookup con Nombre no calificado: C++ 0x proyecto n3290
- 13. EncuadernaciónRedireccionar a un nombre de ensamblado diferente
- 14. Hibernate falla al anteponer nombre de clase completamente calificado al nombre de propiedad en asociación ManyToMany
- 15. Diferencia entre el espacio de nombre raíz y el nombre del ensamblado
- 16. Obtener el nombre del ensamblado de la aplicación web, independientemente del ensamblaje de ejecución actual
- 17. leyendo el nombre del archivo de la entrada del usuario en el ensamblado MIPS
- 18. Diferencias entre un "nombre local" y un "nombre calificado" en un atributo xml
- 19. Cambio de nombre de archivo de ensamblado y Assembly.LoadFile
- 20. Obtener el nombre de clase totalmente calificado de un objeto en Python
- 21. ¿Existe un nombre de usuario "totalmente calificado" en el contexto de la Autenticación de Windows?
- 22. Descargue forzosamente DLL del ensamblado
- 23. Análisis del lado del servidor
- 24. C# - puede hacer una referencia de ensamblado "débil" a un ensamblado con nombre fuerte
- 25. System.ArgumentException: nombre de tipo duplicado dentro de un ensamblado
- 26. Análisis del código VS2011
- 27. Problema al crear instancias de tipo utilizando la reflexión del ensamblado de nombre seguro
- 28. Análisis de requisitos del software
- 29. Análisis del argumento del script de Shell
- 30. Prioridades de carga del ensamblado .NET
¿Qué es un montaje? – Kieveli
Me refiero a los ensamblados .NET aquí. –