How does the Visual Studio debugger know where the source is when loading an assembly at runtime?(在运行时加载程序集时,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调试器如何知道源代码在哪里?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在运行时加载程序集时,Visual Studio调试器如何知道源代码在哪里?
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- 输入按键事件处理程序 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 如何用自己压缩一个 IEnumerable 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01