如何获取 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 文件?的主要内容,如果未能解决你的问题,请参考以下文章
我想在 dotnetcore web api 控制器中使用 linq 方法通过 entityframework 从多个表中获取数据
EntityFramework5代码先行,如何配置不同列名的分表关系?
如何更改 Microsoft.AspNet.Identity.EntityFramework.IdentityUser 中的 id 类型