2009-10-26 14 views
17

Me gustaría obtener el atributo AssemblyCompany de un proyecto WinForm dentro de mi biblioteca de clases C#. En WinForms, puedo llegar a esta información mediante el uso de:Recuperar AssemblyCompanyName de Class Library

Application.CompanyName; 

Sin embargo, me parece que no puede encontrar una manera de llegar a esa misma información utilizando una biblioteca de clases. ¡Cualquier ayuda que pudieras proporcionar sería genial!

+0

El AboutBox accede y muestra la mayor parte de la información del conjunto (aunque no la fecha de compilación). Acabo de lanzar el formulario AboutBox, Minimized, al que agregué un código para mostrar los campos obligatorios en una clase común y cerrar el formulario. – italfingers

Respuesta

23

Para obtener el conjunto en el cual el código actual (el código de biblioteca de clases) reside en realidad, y leer su atributo empresa:

Assembly currentAssem = typeof(CurrentClass).Assembly; 
object[] attribs = currentAssem.GetCustomAttributes(typeof(AssemblyCompanyAttribute), true); 
if(attribs.Length > 0) 
{ 
    string company = ((AssemblyCompanyAttribute)attribs[0]).Company 
} 
+0

No sé si esto se debe a que estoy en .NET 2.0, pero tuve que agregar "verdadero" al final de la llamada para GetCustomAttributes. ¡Aparte de eso, trabajó como un campeón! ¡Gracias por tu ayuda! –

+2

¡Lo encontré muy útil! Si está utilizando una nueva versión .NET, puede usar typeof (CurrentClass) .Assembly.GetCustomAttribute (). Company – DarioDF

4
Assembly assembly = typeof(CurrentClass).GetAssembly(); 
    AssemblyCompanyAttribute companyAttribute = AssemblyCompanyAttribute.GetCustomAttribute(assembly, typeof(AssemblyCompanyAttribute)) as AssemblyCompanyAttribute; 
    if (companyAttribute != null) 
    { 
     string companyName = companyAttribute.Company; 
     // Do something 
    } 
+0

se olvidó de verificar companyAttribute == null –

+0

Fixed. El código que tomé esto no comprueba nulo porque está en nuestro componente de registro (donde está establecido el atributo de nombre de la empresa). El nombre de la empresa es obligatorio, por lo tanto, si no está allí, se lanzará una excepción la primera vez que el desarrollador infractor ejecute el código. –

4

usted podría utilizar la clase FileVersionInfo para obtener NombreCompañía una mucho más .

Dim info = FileVersionInfo.GetVersionInfo(GetType(AboutPage).Assembly.Location) 
    Dim companyName = info.CompanyName 
    Dim copyright = info.LegalCopyright 
    Dim fileVersion = info.FileVersion 
+0

¿Por qué usar fileinfo para obtener información sobre el mismo conjunto que ya está en el alcance? – devlord

+0

@lorddev La única forma que veo de obtener un objeto FileVersionInfo es llamando a la función GetVersionInfo estática/compartida que toma una ruta de cadena. ¿Otras opciones? –