Pertanyaan Bagaimana saya bisa mendapatkan jalur aplikasi dalam aplikasi konsol NET.?


Bagaimana cara menemukan jalur aplikasi dalam aplikasi konsol?

Di Formulir Windows, Saya bisa menggunakan Application.StartupPath untuk menemukan jalur saat ini, tetapi ini sepertinya tidak tersedia di aplikasi konsol.


809
2018-05-07 23:05


asal


Jawaban:


System.Reflection.Assembly.GetExecutingAssembly().Location1

Gabungkan dengan System.IO.Path.GetDirectoryName jika yang Anda inginkan adalah direktori.

1Sesuai komentar Mr.Mindor:
System.Reflection.Assembly.GetExecutingAssembly().Location mengembalikan tempat perakitan saat ini berada, yang mungkin atau mungkin tidak berada di tempat perakitan berada ketika tidak mengeksekusi. Dalam hal rakitan penyalinan bayangan, Anda akan mendapatkan jalur di direktori temp. System.Reflection.Assembly.GetExecutingAssembly().CodeBase akan mengembalikan jalur 'permanen' dari majelis.


1035
2018-05-07 23:09



Anda dapat menggunakan kode berikut untuk mendapatkan direktori aplikasi saat ini.

AppDomain.CurrentDomain.BaseDirectory

361
2018-05-08 19:03



Anda memiliki dua opsi untuk menemukan direktori aplikasi, yang Anda pilih akan bergantung pada tujuan Anda.

// to get the location the assembly is executing from
//(not necessarily where the it normally resides on disk)
// in the case of the using shadow copies, for instance in NUnit tests, 
// this will be in a temp directory.
string path = System.Reflection.Assembly.GetExecutingAssembly().Location;

//To get the location the assembly normally resides on disk or the install directory
string path = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;

//once you have the path you get the directory with:
var directory = System.IO.Path.GetDirectoryName(path);

122
2017-10-14 18:27



Mungkin agak terlambat tetapi ini layak disebutkan:

Environment.GetCommandLineArgs()[0];

Atau lebih tepatnya untuk mendapatkan hanya jalur direktori:

System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);

Edit:

Cukup banyak orang yang menunjukkan hal itu GetCommandLineArgs tidak dijamin untuk mengembalikan nama program. Lihat Kata pertama pada baris perintah adalah nama program hanya berdasarkan konvensi. Artikel ini menyatakan bahwa "Meskipun sangat sedikit program Windows menggunakan permainan kata-kata ini (saya tidak menyadari adanya diri saya sendiri)". Jadi itu mungkin untuk 'spoof' GetCommandLineArgs, tetapi kita berbicara tentang aplikasi konsol. Aplikasi konsol biasanya cepat dan kotor. Jadi ini cocok dengan filosofi KISS saya.


72
2018-05-21 13:27



Bagi siapa pun yang tertarik dengan aplikasi web asp.net. Berikut ini hasil saya dari 3 metode berbeda

protected void Application_Start(object sender, EventArgs e)
{
  string p1 = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
  string p2 = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
  string p3 = this.Server.MapPath("");
  Console.WriteLine("p1 = " + p1);
  Console.WriteLine("p2 = " + p2);
  Console.WriteLine("p3 = " + p3);
}

hasil

p1 = C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\a897dd66\ec73ff95\assembly\dl3\ff65202d\29daade3_5e84cc01
p2 = C:\inetpub\SBSPortal_staging\
p3 = C:\inetpub\SBSPortal_staging

aplikasi berjalan secara fisik dari "C: \ inetpub \ SBSPortal_staging", jadi solusi pertama pasti tidak sesuai untuk aplikasi web.


38
2017-10-06 19:42



Jawaban di atas adalah 90% dari apa yang saya butuhkan, tetapi mengembalikan Uri alih-alih jalur biasa bagi saya.

Sebagaimana dijelaskan dalam posting forum MSDN, Bagaimana cara mengubah jalur URI ke filepath normal?, Saya menggunakan yang berikut:

// Get normal filepath of this assembly's permanent directory
var path = new Uri(
    System.IO.Path.GetDirectoryName(
        System.Reflection.Assembly.GetExecutingAssembly().CodeBase)
    ).LocalPath;

34
2018-04-13 20:20



Anda mungkin ingin melakukan ini:

System.IO.Path.GetDirectoryName(
    System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)

26
2018-05-07 23:10