首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CompileAssemblyFromSource生成的程序集异常上没有行号

在CompileAssemblyFromSource生成的程序集异常上没有行号
EN

Stack Overflow用户
提问于 2009-05-26 17:35:21
回答 3查看 683关注 0票数 3

我的应用程序有一个脚本功能,可以使用CodeDomProvider.CompileAssemblyFromSource从用户的脚本编译内存中的程序集。它类似于this answer中描述的内容。

它工作得很好,但是从脚本代码中抛出的任何异常在堆栈跟踪中都没有行号。我尝试设置compilerParameters.IncludeDebugInformation = true,但它仍然不包含行号。

是否可以从内存中的程序集获取异常的行号?

以下是我用来编译程序集的关键代码片段:

代码语言:javascript
复制
        CompilerParameters compilerParameters =
            compilerInfo.CreateDefaultCompilerParameters();
        compilerParameters.GenerateInMemory = true;
        compilerParameters.GenerateExecutable = false;
        compilerParameters.IncludeDebugInformation = true;

        ...

        CodeDomProvider codeProvider = compilerInfo.CreateProvider();
        CompilerResults compilerResults =
            codeProvider.CompileAssemblyFromSource(
                compilerParameters,
                new string[] { sourceCode });
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-26 17:39:39

我们通过将源代码写出到一个临时文件,然后使用该文件来编译代码,而不是内存中的字符串,从而解决了这个问题。这为我们提供了有意义的调试信息,否则我们无法获得。

票数 4
EN

Stack Overflow用户

发布于 2009-05-26 17:37:44

从我找到的herehere的注释来看,在附加行号之前,程序集的PDB文件必须与程序集位于相同的目录中。这似乎排除了内存中程序集的调试信息。

票数 2
EN

Stack Overflow用户

发布于 2015-07-24 20:52:52

在为.NET Framework4开发的应用程序中,当我运行的系统安装了.NET Framework4.5(或可能更高版本)时,我确实在异常堆栈跟踪中得到了行号,但当它只安装了.NET Framework4(完整版或Client Profile)时,我不会得到行号。

所以,是的,现在可以从内存中的程序集获得异常的行号,也就是通过在.NET Framework4.5上运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/911840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档