本文介绍了在运行时加载程序集时,Visual Studio调试器如何知道源代码在哪里?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
考虑以下代码:
private static void Main(string[] args)
{
var exe = new MemoryStream(File.ReadAllBytes(args[0]));
var assembly = AssemblyLoadContext.Default.LoadFromStream(exe);
assembly.EntryPoint.Invoke(null, new object[] { new string[0] });
}
此程序在.Net core 1.1应用程序中编译,args
在其调试输出目录中包含.Net core中通用Hello World的DLL的路径。
当我运行此程序时,它从DLL的内存副本加载程序集,然后调用入口点。Visual Studio似乎成功地识别出此DLL与我在解决方案中打开的Hello World项目相同,并且我可以单步执行并调试此调用的程序。
当我从程序集的内存副本加载时,VS调试器如何知道在哪里可以找到源代码?
推荐答案
首先定位.pdb
,然后从那里定位源文件。
.pdb
?发件人Specify Symbol (.pdb) and Source Files in the Visual Studio Debugger:
在Visual Studio IDE中调试项目时,调试器知道代码的.pdb和源文件的默认位置。
...
(默认情况下,如果您已在计算机上生成了DLL或可执行文件,则链接器会将关联的.pdb文件的完整路径和文件名放置在DLL或可执行文件内。调试器首先检查符号文件是否存在于DLL或可执行文件内指定的位置。这很有帮助,因为您始终有符号可用于您在计算机上编译的代码。)
它还将在其他位置搜索.pdb
,但当您尝试取消程序集与其在磁盘上的文件的关联时,此位置似乎是最有可能的来源。
这篇关于在运行时加载程序集时,Visual Studio调试器如何知道源代码在哪里?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!