2009-04-22 14 views
22

Mi sono guardato intorno ma non ho trovato una soluzione per questo problema: voglio creare una libreria di classi che abbia un file di configurazione in una sottodirectory chiamata Configuration. Voglio che la libreria di classi sia distribuita ovunque e voglio che trovi i suoi file di configurazione conoscendo la sua posizione.Come ottenere la directory corrente su una libreria di classi?

I tentativi precedenti con Assembly.GetExecutingAssembly().Location non funzionavano.
tornerebbe destinazioni temporanei come

C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\7c00e0a3\38789d63\assembly\dl3\9c0a23ff\18fb5feb_6ac3c901

anziché il percorso

bin/Configuration desideri.

Quindi:

  1. Può una libreria di classi essere consapevoli della propria posizione sul disco?
  2. Come potrei fare per gli script di test witting per questa funzionalità poiché sembra che le directory cambiamento in base a come si esegue l'applicazione (debug all'interno VS, la distribuzione su IIS, ecc)
+0

Perché non includere la configurazione nel file app.config dell'applicazione e utilizzare ConfigurationManager nelle librerie di classi? –

+0

Si potrebbe voler chiarire la domanda (per una migliore ricercabilità in seguito) che questo è ASP.NET. Per le applicazioni desktop, GetExecutingAssembly() funziona perfettamente. – Stu

+1

@Justin: voglio che la libreria di classi sia indipendente dall'applicazione chiamante. @Stu: entrambi. Voglio creare una libreria di classi che possa essere utilizzata sia per le app della console che per le app Web. La biblioteca di classe non dovrebbe preoccuparsi di chi la chiama. – nandos

risposta

33

Questo dovrebbe funzionare -

string assemblyFile = (
    new System.Uri(Assembly.GetExecutingAssembly().CodeBase) 
).AbsolutePath; 
+0

: System.Reflection.Assembly.GetExecutingAssembly() .Location non fornisce le stesse informazioni ...? – dba

+1

@dba non quando c'è la copia shadow. provalo in unit test, per esempio, e sarà sbagliato –

Problemi correlati