- 一个 .NET Standard 2.0 库
- 一个 NUnit 测试项目,目标为 .NETFramework 4.6.1
使用最新的 VS 2017 和 NUnit。
我在周末在家里工作,并将我的工作上传到 git,今天开始从公司工作(我之前已经在两个地方都工作过)。只有现在我发现项目出了问题(我不太记得一开始是什么问题,但似乎问题与我现在遇到的问题相同,稍后会描述)。
在试图修复它的过程中,我把它弄得无法修复了,于是我完全删除了它,并重新克隆了 git 库。
该项目编译良好,但运行时测试抛出“方法未找到”异常。稍微调查了一下,发现问题仅表现在以下方法的一个重载上:
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的,但这并不是我的情况,虽然这个问题让我检查了重载,并发现其中一个确实有效。
在家里一切正常,虽然我还没有像在工作中那样尝试删除和重新安装项目。这导致问题可能有两个来源:环境,尽管我还没有找到有意义的区别,或者git,尽管我使用VS的“标准”git忽略(这个),所以那里不应该有问题。我的项目基本设置在周末之前没有改变并且正常工作,所以最近的更改肯定是导致了某些问题。
此外,如果我向解决方案添加控制台应用程序(.NET Framework 4.6.1),并尝试从中调用有问题的方法,则其实际上可以正常工作。
如果需要,我的GitHub项目链接在这里。
在评论中有人要求提供调用示例。基本上,我有两个不同设置的测试夹具类——一个用于实际调用API以便于调试实际使用,另一个则为其提供虚拟数据,符合良好的测试实践。以下为正常的工作示例:
[OneTimeSetUp]
public void Setup()
{
ynabClient = YNABClient.GetInstance();
ynabClient.RefreshAccessToken(ApiKeys.AccessToken);
}
抛出异常:
[OneTimeSetUp]
public void Setup()
{
handler = new StubHandler();
ynabClient = YNABClient.GetInstance(handler);
}
一些调查表明,我的问题很可能与.NET Framework和.NET Standard的System.Net.Http版本不一致有关,如果您在谷歌上搜索,这是一个非常普遍的问题。然而,我找到的所有示例都没有展示出我的特定症状,我还不确定该怎么办。为什么在我家里的电脑上一切都正常呢?
dynamic
)发布调用“GetInstance”方法的位置。由于某种原因,运行时绑定器无法将参数与静态方法匹配起来。 - D Stanley