Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从第n行获取Sorce代码_C#_.net - Fatal编程技术网

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)=>(文件,行)