2015-10-12 10 views
6

Sto tentando di accedere a un file da una libreria di classi vNext di ASP.Net utilizzando un percorso relativo. Il file è (dovrebbe essere) situato nella cartella di installazione dell'applicazione e per creare il percorso completo necessario per ottenere il percorso della cartella.Come ottenere l'ubicazione dell'assembly in esecuzione?

Utilizzo di System.Reflection.Assembly.GetExecutingAssembly(), la proprietà Location è vuota. La proprietà CodeBase contiene quanto segue: = file di

Codebase ": /// C: /Users/username/.dnx/runtimes/dnx-clr-win-x86.1.0.0-beta7/bin/Microsoft .Dnx.Loader.dll "

Come posso ottenere la cartella effettiva in cui si trovano i file in esecuzione?

EDIT: Le risposte here non sono validi per ASP.Net 5 come ho spiegato già. - solo per il doppio flagging.

+1

Provato usando AppDomain.CurrentDomain.BaseDirectory ;? – JFM

+1

Possibile duplicato di [Come ottengo il percorso dell'assembly in cui si trova il codice?] (Http://stackoverflow.com/questions/52797/how-do-i-get-the-path-of-the-assembly -the-code-is-in) – jrummell

+0

Non è un duplicato. Le risposte non sono valide per ASP.Net 5 come ho spiegato nella mia domanda. Proverò il suggerimento di JFM al mattino. –

risposta

6

Prova IApplicationEnvironment.ApplicationBasePath. È possibile creare un costruttore nella classe Startup che prende questo come un argomento, ottenere il valore lì e poi renderla disponibile alla libreria di classi:

public Startup(IApplicationEnvironment env) 
{ 
    _location = env.ApplicationBasePath; 
} 

In alternativa, se hai trovato un'istanza della classe che ha bisogno la posizione tramite dI, è possibile aggiungere "Microsoft.Dnx.Runtime.Abstractions" come dipendenza nel progetto libreria di classi e aggiungere un costruttore della classe che prende IApplicationEnvironment:

public MyClass(IApplicationEnvironment env) 
{ 
    Location = env.ApplicationBasePath; 
} 

in una classe statica prova

ProjectRootResolver.ResolveRootDirectory(Directory.GetCurrentDirectory());

ProjectRootResolver è nel Microsoft.Dnx.Runtime namespace.

+0

Brillante! :) funziona come un fascino. Ho avuto un '' utilizzo di istruzione Microsoft.Framework.Runtime' prima e che non è riuscito. 'funziona con Microsoft.Dnx.Runtime'. –

+0

Qualche idea su come ottenere questo in una classe statica? Il costruttore statico è sempre senza parametri –

+0

@MoslemBenDhaou Vedi la mia modifica sopra.Spero che funzioni per te. –

0

AppDomain.CurrentDomain.BaseDirectory è probabilmente il più utile per accedere ai file la cui posizione è relativa alla directory di installazione dell'applicazione.

saperne di più visita Best way to get application folder path

Speranza che aiuta.

+0

Purtroppo no. Ancora dando 'C: \ Utenti \ nomeutente \ .dnx \ runtimes \ dnx-clr-win-x86.1.0.0-beta7 \ bin \'. –

+0

AppDomain non esiste in .NET Core –

Problemi correlati