为了账号安全,请及时绑定邮箱和手机立即绑定

未找到重载方法

未找到重载方法

C#
www说 2021-10-24 14:03:44
设置如下:.NET Standard 2.0 库针对它的 NUnit 测试项目,针对 .NETFramework 4.6.1最新的 VS 2017,最新的 NUnit。我周末在家一直在做这个项目,将我的工作上传到 git,今天开始工作(我之前已经在两个地方工作过)。直到现在我才发现项目有问题(我不太记得开始时出了什么问题,但似乎问题和我现在的一样,稍后描述)。在摆弄到无法修复的状态后,我完全删除了它并重新克隆了 git repo。该项目编译正常,但在运行时测试抛出“找不到方法”异常。一点点的探索表明,问题只出现在以下方法的一个重载上:  public static YNABClient GetInstance(HttpMessageHandler _handler)    {        if (instance is null)        {            instance = new YNABClient(_handler);        }        return instance;    }    public static YNABClient GetInstance() => GetInstance(new HttpClientHandler());没有参数的可以,有参数的不行。删除和添加库作为测试的参考,删除和添加测试和库项目。我在互联网上找到的类似情况的其他解决方案都与 ASP.NET MVC 有关,这不是我的情况,尽管这个问题确实让我检查了重载并发现其中一个确实有效。在家里,一切仍然正常,尽管我还没有像在工作中那样尝试删除并重新安装该项目。这导致了 2 个可能的问题来源:环境,尽管我还没有找到有意义的差异,或者 git,尽管我对 VS(这个)使用了“库存”git ignore ,所以那里应该没有问题. 我的项目的基本设置在周末没有改变并且之前工作过,所以从最近的摆弄中打破了一些东西。此外,如果我将控制台应用程序(.Net Framework 4.6.1)添加到解决方案并尝试从中调用有问题的方法,它实际上工作正常。如果这有帮助,我的项目 github 在这里我被要求在评论中调用示例。基本上,我有 2 个具有不同设置的 Test Fixture 类 - 一个用于真正的 API 调用,以便于调试实际使用,另一个用于根据良好的测试实践伪造它。作品:    [OneTimeSetUp]    public void Setup()    {        ynabClient = YNABClient.GetInstance();        ynabClient.RefreshAccessToken(ApiKeys.AccessToken);    }抛出异常:    [OneTimeSetUp]    public void Setup()    {        handler = new StubHandler();        ynabClient = YNABClient.GetInstance(handler);    }一些探索表明我的问题很可能与 System.Net.Http 与 .NET Framework 和 .NET Standard 的版本控制差异有关,如果你用谷歌搜索,这是一个相当普遍的问题。然而,我挖出的所有例子都没有表现出我的特殊症状,我还不确定该怎么做。以及为什么在我的家用 PC 上一切正常。
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

您遇到的问题是您的GetInstance方法接受HttpMessageHandler作为参数,并且在您的测试中您正在传递HttpClientHandler对象。因此,您声明了一个参数,但在调用该方法时提供了不同的对象。


查看完整回答
反对 回复 2021-10-24
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

因此,事实证明,正如 DongDong 所建议的,问题确实出在 .NET Framework 和 .NET Standard 之间的接口上。问题并不是它们不兼容,或者 Test 项目需要一些额外的依赖项,而是它们随 System.Net.Http 的不同版本一起提供。


由于没有显示任何可见的错误,诊断受到阻碍。但是,更改参数类型表明,确实,问题仅在于来自该命名空间的类。


诊断问题的另一个问题是该项目在某些机器上运行良好(我的家用 PC 和 Daisy Shipton 从评论到问题)。


然而,在确定问题的根源后,我首先能够通过 google 搜索该库存在哪些问题,并最终在.NET github上发现了大量不兼容问题。


我尝试了在这些情况下使用的解决方案,并向库的具体版本添加了“绑定重定向”,之后它工作正常。我添加了app.config我的测试项目的重定向。作为参考,它看起来像这样:


<dependentAssembly>

    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />

    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />

</dependentAssembly>

我仍然不明白为什么该项目在某些机器上运行良好。


查看完整回答
反对 回复 2021-10-24
  • 3 回答
  • 0 关注
  • 193 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信