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调试器如何知道源代码在哪里?
基础教程推荐
- 当值可以是对象或空数组时反序列化 JSON 2022-01-01
- Moq It.Is<>不匹配 2022-01-01
- 我应该在后面的代码中直接使用 Linq To SQL 还是使 2022-01-01
- 禁止输入少量字符,例如'<'、'&a 2022-01-01
- Azure Functions:CosmosDBTrigger 未在 Visual Studio 中触发 2022-01-01
- 如果有人提交恶意软件Nuget包怎么办? 2022-01-01
- C# 从 List<List<int>> 中删除重 2022-01-01
- WPF 模态进度窗口 2022-01-01
- .NET SerialPort DataReceived 事件未触发 2022-01-01
- 如何使用 .Net 检查 Active Directory 服务器是否已启动并正在运行? 2022-01-01
