如何获取 EntityFramework NuGet 包的 PDB 文件?

Posted

技术标签:

【中文标题】如何获取 EntityFramework NuGet 包的 PDB 文件?【英文标题】:How can I get a PDB file for the EntityFramework NuGet package? 【发布时间】:2015-11-13 07:24:19 【问题描述】:

我正在尝试在 EntityFramework NuGet 包(版本 6.1.3)中调试 ***。为了查看堆栈帧,我需要 EntityFramework.DLL 和 EntityFramework.SqlServer.DLL 的 PDB 文件。但是,我似乎无法让 Visual Studio 从 MSFT 符号源或 SymbolSource.org 下载它(我可以获得其他系统 PDB 和 NewtonSoft.json 之类的东西)。 EF PDB 在任何地方都可用吗?

【问题讨论】:

这些答案之一对您有用吗? 【参考方案1】:

现在有图片(因为我花了大约一个小时的时间尝试并失败了)

    获取DotPeek from Jetbrains(单机版)

    打开DotPeek -> File -> Open -> 浏览到您的项目bin文件夹并打开EntityFramework.dll

    鼠标右键按钮EntityFramework 然后选择Generate Pdb...

    转到您导出它的文件夹并打开 EntityFramework.pdb 文件夹(我知道是对的!)然后深入挖掘直到找到一个文件 EntityFramework.pdb 并将其复制到您的 bin 文件夹(在 @987654342 旁边@)。

    转到Visual Studio -> DEBUG -> Options and Settings... -> Symbols 然后将您的bin 文件夹添加到Symbol file (.pdb) locations

    运行项目并祈祷那些断点变成成熟的红色......

编辑:它有时会在 optimized 模式下开始运行 EF,这使得调试几乎毫无用处,这是这个问题的重点——如果发生这种情况

    转到Visual Studio -> Debug -> General ->(在最底部)Use Managed Compatibility Mode。勾选并运行项目(如果它得到优化然后取消勾选并运行,然后再次勾选并运行,然后......)

    要查看EF 是否运行优化而不必等到它到达断点 转到Visual Studio -> Debug -> Windows -> Modules。然后,当您运行解决方案模块 (2) 时,应该会出现。点击它,找到EntityFramework.dll 应该有优化的列(Yes = bad, No = 你可以调试它)。

希望这可以为您节省一些时间。

【讨论】:

很好的解释@Matas!谢谢! DotPeek 似乎没有将自己与 VS2017 挂钩,但您可以使用随附的 GUI 执行相同的过程。 对于仍然在 dll 上设置优化的其他人,请确保选中 Supress JIT Optomization on Module load 如果您已经将.pdb 放入您的bin 目录,是否真的需要执行第5 步?我的意思是,如果你硬编码它,你将不得不为每个项目更改它......【参考方案2】:

下载源代码: entity framework on codeplex

下载按钮位于“源”选项卡的子菜单中

下载后:

构建解决方案/项目

导航到bin目录NB:不在正常位置,设置为"..\..\bin\Debug\"。请参阅项目属性。

EntityFramework.pdb 和 EntityFramework.SqlServer.pdb 都在那里。

还想,它会默认可用或更容易。

【讨论】:

我不敢相信这是这个问题的唯一答案 我很惊讶我没有得到任何信任,#justsaying ;-) 完全同意……不得不挖掘才能得到这个…… 对这个问题的独家(尽管不令人满意)答案 请注意:我自己不需要 pdb 文件。我希望获得有关我的异常的更多信息。但是信息已经在那里了。我只需要在 Visual Studio 的局部变量窗口中检查 $exception 变量。 这个答案的问题在于它必须与您在项目中运行的版本完全相同。而且 EF 并不总是有一个合理的版本控制方案【参考方案3】:

其中一种方法是使用 dotpeek 作为符号服务器(加载实体框架 dll 并添加从 dotpeek 设置复制的 dotpeek serer 地址) - 这种方法有什么好处,它会自动生成匹配使用的 dll 版本的 pdb,什么不是很好 - 它不会包含来自源代码等的原始 cmets。

【讨论】:

这也适用于没有符号服务器模式。您可以为程序集生成 pdb 文件,并将 Visual Studio 指向 dotPeek 创建的文件夹。

以上是关于如何获取 EntityFramework NuGet 包的 PDB 文件?的主要内容,如果未能解决你的问题,请参考以下文章

EntityFramework,在添加到表时获取对象ID

如何从实体框架 6 中的 Auditlog 实体获取 id

我想在 dotnetcore web api 控制器中使用 linq 方法通过 entityframework 从多个表中获取数据

如何升级entityframework版本

EntityFramework5代码先行,如何配置不同列名的分表关系?

如何更改 Microsoft.AspNet.Identity.EntityFramework.IdentityUser 中的 id 类型