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.
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.
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.UnescapeDataString
iç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]
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
Bu ".Location" yerine kullanmanın yararı/amacı nedir? (Bir sebebi olması gerektiğinden şüpheleniyorum, fakat bu beni kızdırıyor.) –
@pst: Çevreye bağlı olarak, gölge kopyalama, montajdan önce montajı "taşıyabildiğinden" yanlış olabilir. –
System.Reflection.
Assembly
. GetExecutingAssembly()
. Location
+1.8-) – RichieHindle
Bu, bir MSTest birim testinden çağrıldığında, montajınızdan ziyade mscorlib'in yerini verir. –
Sadece açıklığa kavuşturmak:
Assembly.GetExecutingAssembly().Location
+1: Şüphe Kötü. – RichieHindle
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ı tercihLocalPath, yerel yolların ve unc yollarının tam yolunu içerir, burada AbsolutePath "\\ server" düzeltir "
Assembly.GetExecutingAssembly() Konum – RichieHindle