¿Cómo obtengo programáticamente el GUID de una aplicación en .net2.0

Necesito acceder al ensamblaje de mi proyecto en C # .NET2.0.

Puedo ver el GUID en el cuadro de diálogo ‘Información de la Asamblea’ en Propiedades del proyecto, y en este momento lo he copiado en un const en el código. El GUID nunca cambiará, así que esta no es una solución tan mala, pero sería bueno acceder a ella directamente. ¿Hay alguna forma de hacer esto?

Pruebe el siguiente código. El valor que está buscando se almacena en una instancia GuidAttribute adjunta a la Asamblea

using System.Runtime.InteropServices; static void Main(string[] args) { var assembly = typeof(Program).Assembly; var attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute),true)[0]; var id = attribute.Value; Console.WriteLine(id); } 

Editar: Para aquellos que insisten en rechazar votos … No se puede eliminar esta respuesta porque es la versión aceptada. Por lo tanto, estoy editando para incluir la respuesta correcta ( código de JaredPar a continuación)

Lo suficientemente simple si solo quieres obtener el ensamblado de ejecución:

 using System.Reflection; Assembly assembly = Assembly.GetExecutingAssembly(); //The following line (part of the original answer) is misleading. //**Do not** use it unless you want to return the System.Reflection.Assembly type's GUID. Console.WriteLine(assembly.GetType().GUID.ToString()); // The following is the correct code. var attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute),true)[0]; var id = attribute.Value; 

Otra forma es usar Marshal.GetTypeLibGuidForAssembly .

De acuerdo con msdn:

Cuando los ensamblados se exportan a bibliotecas de tipos, a la biblioteca de tipos se le asigna un LIBID. Puede establecer el LIBID explícitamente aplicando System.Runtime.InteropServices.GuidAttribute en el nivel de ensamblaje, o puede generarse automáticamente. La herramienta Tlbimp.exe (Type Library Importer) calcula un valor LIBID basado en la identidad del ensamblado. GetTypeLibGuid devuelve el LIBID que está asociado con GuidAttribute, si se aplica el atributo. De lo contrario, GetTypeLibGuidForAssembly devuelve el valor calculado. Alternativamente, puede usar el método GetTypeLibGuid para extraer el LIBID real de una biblioteca de tipos existente.

Debería poder leer el atributo Guid del conjunto a través de la reflexión. Esto obtendrá el GUID para el ensamblado actual

  Assembly asm = Assembly.GetExecutingAssembly(); var attribs = (asm.GetCustomAttributes(typeof(GuidAttribute), true)); Console.WriteLine((attribs[0] as GuidAttribute).Value); 

Puede reemplazar el atributo GuidAttribute con otros atributos también, si desea leer cosas como AssemblyTitle, AssemblyVersion, etc.

También puede cargar otro ensamblaje (Assembly.LoadFrom y todo) en lugar de obtener el ensamblado actual, si necesita leer estos atributos de ensamblajes externos (por ejemplo, cuando carga un plugin)

En caso de que alguien más esté buscando un ejemplo de funcionamiento listo para usar, esto es lo que terminé usando en base a las respuestas anteriores.

 using System.Reflection; using System.Runtime.InteropServices; label1.Text = "GUID: " + ((GuidAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(GuidAttribute), false)).Value.ToUpper(); 

Actualizar:

Dado que esto ha recibido un poco de atención, decidí incluir otra forma de hacerlo que he estado usando. De esta manera le permite usarlo desde una clase estática:

  ///  /// public GUID property for use in static class  ///  /// Returns the application GUID or "" if unable to get it.  static public string AssemblyGuid { get { object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(GuidAttribute), false); if (attributes.Length == 0) { return String.Empty; } return ((System.Runtime.InteropServices.GuidAttribute)attributes[0]).Value.ToUpper(); } } 

Para obtener la ID de aplicación, puede usar la siguiente línea de código:

 var applicationId = ((GuidAttribute)typeof(Program).Assembly.GetCustomAttributes(typeof(GuidAttribute), true)[0]).Value; 

Para esto, necesita incluir System.Runtime.InteropServices;

O, igual de fácil:

 string assyGuid = Assembly.GetExecutingAssembly().GetCustomAttribute().Value.ToUpper(); 

Funciona para mi…