2014-04-08 11 views
11

Ho un'architettura plug-in in cui è definita una classe base astratta nell'applicazione principale. Usa la riflessione per caricare gli assembly che hanno implementazioni derivate della classe base. Vorrei ottenere le informazioni sulla versione dell'assembly che contiene l'oggetto derivato. Qui è la mia classe di base:GetExecutingAssembly() per la classe derivata in assembly diversi

namespace My.AppNameSpace 
{ 
    public abstract class BaseClass 
    { 
     public Version Version 
     { 
      get 
      { 
       Assembly assembly = Assembly.GetExecutingAssembly(); 
       FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location); 
       string version = fvi.FileVersion; 
       return new Version(version); 
      } 
     } 

     public abstract void DoStuff(); 
    } 
} 

Dal momento che la classe base è parte del gruppo principale, questo restituisce sempre le informazioni sulla versione dell'applicazione in esecuzione, non è la DLL che contiene l'implementazione della classe derivata. Posso cambiare la versione Accessor per essere abstract, e funziona come vorrei. Ma poi ho bisogno di aggiungere quelle stesse linee di codice a ogni plug-in di implementazione.

C'è qualche trucco per ottenere le informazioni sulla versione dell'oggetto derivato dal codice in una classe base che esiste in un assembly separato?

risposta

22

Utilizzare invece this.GetType().Assembly.

+0

sapevo che doveva esserci qualcosa di semplice. Grazie! – djs

+0

** facepalm ** Ho bisogno di una pausa. –

7

Se, dalla classe astratta, si chiama this.GetType(), si otterrà il tipo di runtime della classe effettiva. Da lì, è possibile ottenere la proprietà Assembly di quel tipo.

public Version Version 
    { 
     get 
     { 
      Assembly assembly = this.GetType().Assembly; 
      FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location); 
      string version = fvi.FileVersion; 
      return new Version(version); 
     } 
    } 
Problemi correlati