调试位于 nuget 包中的 C# 接口实现

Posted

技术标签:

【中文标题】调试位于 nuget 包中的 C# 接口实现【英文标题】:Debug C# interface implemenation located in nuget package 【发布时间】:2019-05-07 06:15:25 【问题描述】:

我有 3 个项目:

项目 A 是主项目(.NET Core Web 应用程序) 项目 B 是 NuGet 包中包含接口的类库 项目 C 是 NuGet 包中实现接口的类库

我设法构建了包含 pbd 符号和源代码的 NuGet 包。 NuGet 包是在发布模式下构建的(这可能是问题吗?)

我的调试设置如下

Just My Code 未勾选 我正在加载两个 NuGet 包的符号

我可以进入所有“常规”方法,例如包含的扩展方法。

但是当我到达接口时,我无法让它进入实现接口的类。但是我可以从这个 NuGet 包的常规方法中单步执行代码。

任何提示,如果这是不可能的,或者我错过了调试设置中的其他内容。

【问题讨论】:

这可能很棘手,如果最糟糕的情况变得更糟,只需手动引用它们,当你真正开始工作时,你可能已经解决了 20 次错误。总之祝你好运 是的,这 20 次是正确的(现在尝试了几天)。但是,如果我引用它们,我的 .csproj 文件会被修改,而构建系统不喜欢这些文件。有没有办法让 2 个 .csproj 文件并排并相互同步(一个用于构建服务器,一个用于开发)? 您特别提到您在发布模式下构建 NuGet 包,但您是否尝试在开发模式下构建它们?我至少会对其进行测试,看看它是否有任何不同。 【参考方案1】:

您可能有几个选择:

尝试构建 NuGet 包的调试版本,看看是否有帮助 或者,删除对 NuGet 包的引用,并直接包含和引用它们的项目,至少是暂时的;这应该可以让您直接调试它们。

如果没有其他办法,还有第三种选择:记录。

这可能不是您想听到的确切答案,但根据我的经验,解决此类问题的最佳方法可能是添加一些可根据需要配置为启用或禁用的日志记录。

很多错误往往是由缺失值、缺失引用或其他一些错误配置引起的。找到它们后,修复它们可能很简单,但由于实现“隐藏”在这样的接口后面,因此很难找到它们。

找到某种方法将输入值公开给您的逻辑,无论是通过登录到数据库还是仅将纯文本日志写入文件,我敢打赌您会节省一些时间下一个错误会出现,如果不是之前的话。

...请记住在进入生产模式时禁用日志记录,尤其是在记录的数据可能包含任何敏感信息的情况下。

【讨论】:

正如你所建议的,我尝试在调试模式下构建它们以进行测试(仍然包括源代码和所有内容,只是将配置从发布更改为调试。哦,嘿,我可以进入执行界面。 天哪,.NET Core 的那一部分和 nugets s__k 为 h__l。具有讽刺意味的是,ASP.NET Core 的建议是将所有内容都放在接口后面(用于单元测试)。然后“引入一个像 nugets 这样的系统”,你不能调试它,因为你不能进入接口实现。似乎您不能使用 nuget 服务器来并排部署 Release & Debug,因为协议不包含配置模式 & VS2017 不允许您定义从服务器 X 加载 Release 和从服务器 Y 调试。使用他们说的 nugets .这是他们所说的 .NET Core 方式。他们说让我们玩得开心。 在将 SharedProjects 迁移到 nugets 后,我花了一个多星期的时间来弄清楚如何再次开发,我想我可以写一本书,或者至少写一篇关于“如何设置 .NET Core”的很长的博客文章使用 nugets 时的开发环境”。结果它似乎没有像应有的那样顺利。 @monty 很遗憾您在使用 .NET Core 时遇到了问题。很高兴听到您的直接问题得到了解决。如果您确实写了一篇博客文章或任何关于此体验的其他内容,您可以考虑在您的 OP 中链接到它,或者在它下面的评论中链接到它。以后可能会对其他人有所帮助。 Ps:如果这解决了您的问题,请考虑将检查作为您问题的“已接受答案”。 ;) 与 nugets 相关的编码环境结构比一般的 .NET Core 更麻烦。 :-) 好吧,我从 6 个有机增长的共享项目开始相互引用,今天结束了 25 个以上的 nuget 包项目,每个项目都有 2 个 .csproj 文件(一个用于构建服务器引用 nugets,一个用于开发直接引用项目)。让我们看看它是如何工作的 :-) 至少编码和调试似乎再次感觉很棒。我当然会接受你的回答并感谢你的帮助。

以上是关于调试位于 nuget 包中的 C# 接口实现的主要内容,如果未能解决你的问题,请参考以下文章

.net core 和 WPF 开发升讯威在线客服系统:调用百度翻译接口实现实时自动翻译

如何调试我创建的 NuGet 包中的代码

NuGet 包中的文档消失了

ModelDriven & Preparable 接口

spring 动态指定具体实现类

java Set接口