C# 从第n行获取Sorce代码
是否可以动态获取源代码?大概是这样的: 虚拟代码:C# 从第n行获取Sorce代码,c#,.net,C#,.net,是否可以动态获取源代码?大概是这样的: 虚拟代码: 1 int x = 5; 2 string y = ""; 3 string codeFromLine1 = SomeClass.SomeMethod("currentfilename", 1) codeFromLine1“int x=5;”C#编译为IL;您发布的应用程序几乎肯定不会以任何方式包含源代码,虽然IL可以反转回C#(使用正确的工具,假设它没有被故意混淆),但它在原始源代码中并不总是相同的,行号也没有任何意义。所以一般来说:
1 int x = 5;
2 string y = "";
3 string codeFromLine1 = SomeClass.SomeMethod("currentfilename", 1)
codeFromLine1“int x=5;”C#编译为IL;您发布的应用程序几乎肯定不会以任何方式包含源代码,虽然IL可以反转回C#(使用正确的工具,假设它没有被故意混淆),但它在原始源代码中并不总是相同的,行号也没有任何意义。所以一般来说:不。在一些非常特殊的情况下:可能。如果您可以访问原始代码文件
int lineNo = 1;
string codeLine = File.ReadLines(fileNameOfSourceCode)
.Skip(lineNo - 1);
.First();
这对于设计时工具可能有一些用处;然而,我不知道它在运行时的用途。请注意,如果在调试配置中编译代码并包含*.PDB文件,则异常会生成文件名、行号和列号。我也可以使用发布配置;但是,代码优化器可能会有点混淆。从何处开始动态执行?从编译后的代码?您需要知道原始文件的位置“但是,在运行时您不知道运行的是哪行代码。”注意:
[CallerFilePath]
和[CallerLineNumber]
确实可以将该信息嵌入到您的应用程序中-不过,我并不是说这是一件好事!示例:static(字符串文件,int行)WhoAmI([CallerFilePath]字符串文件=null,[CallerLineNumber]int行=0)=>(文件,行)代码>