2012-06-09 18 views
5

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

+0

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

+0

Uygulamayı durdurun (Hata ayıklama + Hata ayıklamayı durdur) ve projenizi yeniden oluşturun. – adatapost

cevap

2

(.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; 
+1

Bu cevap silinmeli veya bir yoruma dönüştürülmelidir. –

+0

@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

6

, böyle bir ilişki yoktur. Bir sınıf kısmi olabilir, bu yüzden birkaç farklı kaynak dosyadan gelebilir.

+0

Muhtemelen haklısınız ... teşekkürler – satellite

+0

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. –

+2

@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

12

.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 

Bkz: http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callerfilepathattribute(v=vs.110).aspx

+0

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) –

İlgili konular