Nasıl .cs dosya türüne yolu bulunur? fonksiyonunC# türünde bir yere .cs dosya yolu nasıl bulunur? #
Prototip: gibi
string FindPath(Type);
İade şey "C: \ Projeler \ ..... \ MyClass.cs" Tüm sınıflar meclislerinde derlenmiş olsun
Nasıl .cs dosya türüne yolu bulunur? fonksiyonunC# türünde bir yere .cs dosya yolu nasıl bulunur? #
Prototip: gibi
string FindPath(Type);
İade şey "C: \ Projeler \ ..... \ MyClass.cs" Tüm sınıflar meclislerinde derlenmiş olsun
(.exe veya dll). Bir sınıfın kaynak dosyasına giden yolu alabileceğinizi sanmıyorum çünkü bu sınıf bile mevcut olmayabilir (.exe dosyasını başka bir makineye kopyaladıysanız).
Ancak, geçerli derlemenin (.exe dosyası) yolunu çalıştırabilirsiniz. Bu yanıt göz atın: Mümkün değil Get the Assembly path C#
string file = (new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath;
Bu cevap silinmeli veya bir yoruma dönüştürülmelidir. –
@ChrisMarisic Katılmıyorum, bu geçerli bir cevap ve bunun neden mümkün olmadığını iyi bir açıklama ile geçerli bir cevaptır. – ForceMagic
, böyle bir ilişki yoktur. Bir sınıf kısmi olabilir, bu yüzden birkaç farklı kaynak dosyadan gelebilir.
Muhtemelen haklısınız ... teşekkürler – satellite
Bir hata ayıklama yapısı ile mümkün olabileceğini düşünüyorum, çünkü yığın izlerinde dosya adı ve satır numarasını göstermek için yeterli hata ayıklama bilgisi var (ör. Http://msdn.microsoft .com/tr-tr/kütüphane/system.diagnostics.stacktrace.aspx). Yine de bu bilgiye nasıl erişeceğimi bilmiyorum. –
@TimS .: Hata ayıklama bilgisi var, bu yüzden bir şekilde kazmak mümkün, ancak sınıf başına değil, yalnızca kaynak dosya başına ifade alabilirsiniz. – Guffa
.NET 4.5 size (MSDN'den) CallerFilePath yansıma özelliğini kullanabilirsiniz:
// using System.Runtime.CompilerServices
// using System.Diagnostics;
public void DoProcessing()
{
TraceMessage("Something happened.");
}
public void TraceMessage(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0)
{
Trace.WriteLine("message: " + message);
Trace.WriteLine("member name: " + memberName);
Trace.WriteLine("source file path: " + sourceFilePath);
Trace.WriteLine("source line number: " + sourceLineNumber);
}
// Sample Output:
// message: Something happened.
// member name: DoProcessing
// source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
// source line number: 31
Bu, ana sınıfın konumları kaydettiği "public HomeController(): base (TraceFileLocation())" satırları boyunca bir şeyler yaparak dosyaların konumlarını izlemek için kullanılabilir. Eğer bir örnek seviyesinde yapıyorsanız, yolları parçalara ayırıyorsanız, gereksiz bir işi engellemek için statik bir koleksiyonda '[CallerFilePath]' değerlerini önbelleğe almak isteyebilirsiniz (ki bu da aslında bu) –
buna ihtiyacın sebebi ne olabilir? Tüm kod bir derleme olarak derlenmiş olduğundan çalışma zamanında mümkün olduğundan emin değilim. – alexn
Uygulamayı durdurun (Hata ayıklama + Hata ayıklamayı durdur) ve projenizi yeniden oluşturun. – adatapost