2009-05-14 16 views
42

Güncel montajın yolunu nasıl alabilirim? Bazı yollardan, hte current assembly (.dll) konumuna göre veri almam gerekiyor.Geçerli montajın yolunun açılması

Birinin yansıma ad alanını kullanmamı istediğini sanıyordum ama orada hiçbir şey bulamıyorum.

+1

Assembly.GetExecutingAssembly() Konum – RichieHindle

cevap

72

kullanabilirsiniz: Açıklamalarda

string path = (new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath; 

bazı öneriler herhangi yüzde kodlama ele emin olmak için, ve TrueWill dan Path.GetFullpath(kullanmak (vvnurmi itibaren) System.Uri.UnescapeDataStringiçinden o geçmesine vardır) Yolun standart Windows formunda olduğundan emin olmak için (ters eğik çizgi yerine eğik çizgi yerine). Burada her aşamada olsun bir örnek: Biz C:\Temp\Temp App\bin\Debug\TempApp.EXE koşuyoruz

string s = Assembly.GetExecutingAssembly().CodeBase; 
Console.WriteLine("CodeBase: [" + s + "]"); 
s = (new Uri(s)).AbsolutePath; 
Console.WriteLine("AbsolutePath: [" + s + "]"); 
s = Uri.UnescapeDataString(s); 
Console.WriteLine("Unescaped: [" + s + "]"); 
s = Path.GetFullPath(s); 
Console.WriteLine("FullPath: [" + s + "]"); 

Çıktı eğer:

 
CodeBase: [file:///C:/Temp/Temp App/bin/Debug/TempApp.EXE] 
AbsolutePath: [C:/Temp/Temp%20App/bin/Debug/TempApp.EXE] 
Unescaped: [C:/Temp/Temp App/bin/Debug/TempApp.EXE] 
FullPath: [C:\Temp\Temp App\bin\Debug\TempApp.EXE] 
+7

Path.GetFullPath komutunu, eğik çizgileri ters eğik çizgi haline getirmek için çağırmanızı öneririz. Eğik çizgi davranışları kullanırken, Assembly.LoadFile (eşit olmayan türler) gibi garip davranışlar alabilirsiniz. – TrueWill

+3

Bu ".Location" yerine kullanmanın yararı/amacı nedir? (Bir sebebi olması gerektiğinden şüpheleniyorum, fakat bu beni kızdırıyor.) –

+4

@pst: Çevreye bağlı olarak, gölge kopyalama, montajdan önce montajı "taşıyabildiğinden" yanlış olabilir. –

6

Sadece açıklığa kavuşturmak:

Assembly.GetExecutingAssembly().Location 
+0

+1: Şüphe Kötü. – RichieHindle

2

Ben

new System.Uri(Assembly.GetExecutingAssembly().EscapedCodeBase).LocalPath; 

EscapedCodeBase o (https://stackoverflow.com/a/21056435/852208 bakınız) yerel yolu geçersiz bir URI kömürü olabilir senaryo

kapakları tercih

LocalPath, yerel yolların ve unc yollarının tam yolunu içerir, burada AbsolutePath "\\ server" düzeltir "

İlgili konular