dipende da ciò che si desidera .. Assembly.GetAssembly
restituire il assembly in cui è dichiarato type
. Assembly.GetExecutingAssembly
restituisce l'assembly su cui è in esecuzione current code
. e Assembly.GetEntryAssembly
restituiscono process executable
, tenere presente che potrebbe non essere il tuo eseguibile. es:
Immagina che il tuo codice sia myexecutable.exe
e tu abbia questo scenario.
trdparty.exe
-> utilizza Assembly.LoadFile
per caricare il tuo eseguibile ed eseguire del codice da riflessione
myexecutable.exe
-> utilizza digitare MyClass
ma il trdparty.exe
patches il codice per utilizzare la nuova versione di MyClass
situato in Patch.dll
Così ora .. se si esegue l'applicazione tutto da solo si ottiene questo risultato
Assembly.GetAssembly(typeof(MyClass)) -> myexecutable.exe
Assembly.GetExecutingAssembly() -> myexecutable.exe
Assembly.GetEntryAssembly() -> myexecutable.exe
ma se avete la scenario precedente si ottiene
Assembly.GetAssembly(typeof(MyClass)) -> Patch.dll
Assembly.GetExecutingAssembly() -> myexecutable.exe
Assembly.GetEntryAssembly() -> trdparty.exe
così come una risposta si dovrebbe usare quello che fornisce il risultato che si desidera .. la risposta può sembrare ovvio che si tratta di Assembly.GetExecutingAssembly()
ma a volte non è .. immaginate che si sta tentando di caricare il file application.config
associato con l'eseguibile .. poi il percorso sarà molto probabilmente dovrebbe essere Assembly.GetEntryAssembly().Location
per ottenere sempre ha percorso del "processo"
come ho detto dipende dallo scenario .. e lo scopo ...
Quale assieme si desidera ottenere la posizione? –
Fanno cose diverse, quindi non ce n'è la migliore. – Dirk
Eseguendo l'assembly, ho bisogno di ottenere il percorso 'bin \ Debug' per calcolare qualcosa. –