Sadece Application.ExecutablePath
kaynak koduna baktım ve uygulama aslında bu * geçerli:
Assembly asm = Assembly.GetEntryAssembly();
string cb = asm.CodeBase;
var codeBase = new Uri(cb);
if (codeBase.IsFile)
return codeBase.LocalPath + Uri.UnescapeDataString(codeBase.Fragment);
else
return codeBase.ToString();
mülkiyet Assembly.CodeBase
bir URI olarak yerini dönecektir. Bir şey gibi:
file:///C:/myfolder/myfile.exe
#
bir URI'de parçası işaretleyici olduğu; parçanın başlangıcını işaretler. Görünüşe göre, Uri
sınıfı, ayrıştırılıp tekrar bir dizeye dönüştürüldüğünde verilen uri'yi değiştirir.
string executablePath = Assembly().GetEntryAssembly().Location;
* ) uygulaması bu daha karmaşıktır, aynı zamanda birden çok uygulama etki vardır durumlarla ilgilenir çünkü: Assembly.Location
'normal' dosya yolunu içerdiğinden
, ben senin en iyi alternatiftir tahmin ve diğer özel durumlar. En yaygın durum için kodu basitleştirdim.
Bunu yeniden oluşturamıyorum. Uygulamam C: \ my # \ project \ foo.exe aracından çalışıyor ve yukarıda yazdığınız gibi Application.ExecutablePath dosyasını doğru yazıyor. Hata ayıkladığınızda, Application.ExecutablePath düzgün bir şekilde denetler mi? Burada gösterilmeyen yazı üzerinde herhangi bir post-processing yapıyor musunuz? – Joe
Yeni bir projede, sadece dosyayı yazacak kodla yeniden test ettim. Hala yeniden üretiyor. Kullandığı çerçeve, fark yaratırsa 4.5. – Ryan
Özellikle Elian'ın sonrası ışığında ilginç. Farklı yaptıklarını merak ediyorum (4.0 çerçevesini kullansam da ...) – Joe