Mai mult
Cel mai bun mod de a obține dosar calea
Văd că există câteva modalități de a obține aplicația cale de folder:
Cererea.StartupPath
Sistemul.IO.Calea.GetDirectoryName( Sistem.Reflecție.De asamblare.GetExecutingAssembly().Locație)
AppDomain.CurrentDomain.BaseDirectory
Sistemul.IO.Director.GetCurrentDirectory()
- Mediu.CurrentDirectory`
Sistemul.IO.Calea.GetDirectoryName( Sistem.Reflecție.De asamblare.GetExecutingAssembly().GetName().CodeBase)
Sistemul.IO.Calea.GetDirectory(Cerere.ExecutablePath)
Ceea ce este cel mai bun mod, în funcție de situație?
464
10
AppDomain.CurrentDomain.BaseDirectory
este probabil cel mai util pentru accesarea fișierelor a căror locație este relativă la aplicarea directorul de instalare.Într-un ASP.NET cererea, aceasta va fi aplicarea directorul rădăcină, nu bin subfolder - care este, probabil, ceea ce vrei, de obicei. Într-o aplicație client, acesta va fi directorul care conține executabilul principal.
Într-un VSTO 2005 aplicație, acesta va fi directorul care conține VSTO reușit ansambluri pentru aplicația dumneavoastră, și nu, să zicem, calea Excel executabil.
Ceilalți se pot întoarce directoare diferite în funcție de mediul dumneavoastră - de exemplu, a se vedea @Vimvq1987's a răspunde.
CodeBase
este locul în care un dosar a fost găsit și poate fi un URL care începe cu http://. În cazul în care "Locație" va fi, probabil, adunarea a descărca cache. CodeBase nu este garantat de a fi setat pentru ansambluri în RGA.Cererea.StartupPath și 7.
Sistemul.IO.Calea.GetDirectoryName(Cerere.ExecutablePath)` - Este doar de gând să lucreze pentru [Windows Forms][1]Sistemul.IO.Calea.GetDirectoryName( Sistem.Reflecție.De asamblare.GetExecutingAssembly().Locație)
Este de gând să vă dau ceva de genul: ` "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\juridice-servicii\e84f415e\96c98009\assembly\dl3\42aaba80\bcf9fd83_4b63d101" care este în cazul în care pagina care se execută este.
AppDomain.CurrentDomain.BaseDirectory pentru aplicații web ar putea fi util și va reveni ceva de genul
"C:\hg\Services\Services\Services.Website\"` care este directorul de bază și este destul de util.Sistemul.IO.Director.GetCurrentDirectory()
și 5. Mediu.CurrentDirectory`veți obține locația în cazul în care procesul a fost concediat de la - atât pentru aplicație web care rulează în modul de depanare de la Visual Studio ceva de genul
"C:\\Program Files (x86)\\IIS Express"
Sistemul.IO.Calea.GetDirectoryName( Sistem.Reflecție.De asamblare.GetExecutingAssembly().GetName().CodeBase)
veți obține locația unde.dll
care se execută codul este, pentru o aplicație web care ar putea fi"fișier:\\C:\\hg\\Services\\Services\\Servicii.Site-ul\\bin"
Acum, în cazul în care, de exemplu, o consolă aplicație puncte 2-6 va fi directorul unde `.exe fișier este.
Sper că acest lucru vă economisește timp.
[1]: https://msdn.microsoft.com/en-us/library/system.windows.forms.application.startuppath(v=vs. 110).aspx
Rețineți că nu toate aceste metode va returna aceeasi valoare. În unele cazuri, ei pot reveni la aceeași valoare, dar fii atent, scopurile lor sunt diferite:
returnează
StartupPath
parametru (poate fi setat atunci când rulați aplicația)se întoarce directorul curent, care poate fi sau nu dosarul în care cererea este situat. Același lucru este valabil și pentru Mediu.CurrentDirectory`. În cazul în care utilizați acest lucru într-un fișier DLL, se va reveni la calea de unde procesul se execută (acest lucru este valabil mai ales în ASP.NET).
Pentru o aplicație web, pentru a obține curent aplicație web director rădăcină, în general, numit prin pagina web pentru actuala cerere de intrare:
Codul de mai sus descriere
Din experiența mea, cel mai bun mod este o combinatie dintre acestea.
Sistemul.Reflecție.De asamblare.GetExecutingAssembly().GetName().CodeBase
Vă va oferi folderul binDirector.GetCurrentDirectory()
Funcționează bine pe .Net Core, dar nu .Net și vă va oferi directorul rădăcină al proiectuluiSistemul.AppContext.BaseDirectory " și " AppDomain.CurrentDomain.BaseDirectory
Funcționează bine în .Net dar nu .Net core și va oferi directorul rădăcină al proiectuluiÎntr-o bibliotecă de clasă care ar trebui să target.Net și .Net core verific la ce cadru este de hosting library și selectați una sau alta.
Am început un proces de un Serviciu Windows peste Win32 API în cadrul sesiunii de utilizator, care este, de fapt conectat (în Task Manager sesiunea 1 nu 0). În această a fost o putem cunoaște, care variabilă este cel mai bun.
Pentru toate cele 7 cazuri la întrebarea de mai sus, sunt următoarele rezultate:
Poate l's util pentru unii dintre voi, faci aceleași lucruri, atunci când căutați cel mai bun variabilă pentru cazul dumneavoastră.
Am folosit cu succes
Acesta funcționează chiar și în interiorul linqpad.
Directorul rădăcină:
acest un "Sistem.IO.Calea.GetDirectory(Cerere.ExecutablePath)" s-a schimbat la Sistem.IO.Calea.GetDirectoryName(Cerere.ExecutablePath)
Dacă știi să te directorul rădăcină: