2009-10-26 23 views
17

Vorrei ottenere l'attributo AssemblyCompany da un progetto WinForm all'interno della mia libreria di classi C#. In WinForms, posso arrivare a queste informazioni utilizzando:Richiamare AssemblyCompanyName dalla libreria di classi

Application.CompanyName; 

Tuttavia, non riesco a trovare un modo per arrivare a quella stessa informazione utilizzando una libreria di classi. Qualsiasi aiuto che potresti fornire sarebbe fantastico!

+0

AboutBox accede e visualizza la maggior parte delle informazioni sull'assembly (sebbene non la data di creazione). Ho appena avviato il modulo AboutBox, ridotto a icona, al quale ho aggiunto del codice per inserire i campi obbligatori in una classe comune e chiudere il modulo. – italfingers

risposta

23

Per ottenere l'assemblea in cui il codice corrente (il codice libreria di classi) risiede in realtà, e leggere il suo attributo azienda:

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

Non so se questo è perché sono in .NET 2.0, ma ho dovuto aggiungere "true" alla fine della chiamata per GetCustomAttributes. Oltre a questo, ha funzionato come un campione! Grazie per l'aiuto! –

+2

L'ho trovato molto utile! Se si utilizza una nuova versione .NET, è possibile utilizzare typeof (CurrentClass) .Assembly.GetCustomAttribute (). Società – 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

si è dimenticato di verificare companyAttribute == null –

+0

Risolto. Il codice da cui ho preso questo non controlla null perché è nel nostro componente di logging (dove è impostato l'attributo del nome della società). Il nome della società è obbligatorio, quindi se non c'è, verrà lanciata un'eccezione la prima volta che lo sviluppatore incriminato esegue il codice! –

4

è possibile utilizzare la classe FileVersionInfo per ottenere CompanyName un molto di più .

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

Perché dovresti usare fileinfo per ottenere informazioni sullo stesso assembly che è già in ambito? – devlord

+0

@lorddev L'unico modo che vedo per ottenere un oggetto FileVersionInfo è chiamando la funzione GetVersionInfo statica/condivisa che accetta un percorso di stringa. Altre opzioni? –

Problemi correlati