首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >System.MissingMethodException单元测试

System.MissingMethodException单元测试
EN

Stack Overflow用户
提问于 2017-05-09 15:29:28
回答 3查看 5.7K关注 0票数 9

在VisualStudio2017测试运行程序中,项目引用的运行时问题似乎是。单元测试CSPROJ使用TargetFramework=net47构建得很好,但是在执行时我们从MSTEST或XUNIT获得以下消息。使用Microsoft.NET.Test.Sdk v15.0.0。

测试执行错误(x86):Serilog扩展

未找到的方法:‘Serilog.SeqLoggerConfigurationExtensions.Seq(Serilog.Configuration.LoggerSinkConfiguration,System.MissingMethodException System.String,Serilog.Events.LogEventLevel,Int32,System.Nullable1<System.TimeSpan>, System.String, System.String, System.Nullable1,System.Nullable1<Int64>, Serilog.Core.LoggingLevelSwitch, System.Net.Http.HttpMessageHandler, System.Nullable1,布尔,Int32’。

单元测试示例- Serilog

代码语言:javascript
复制
[Fact]
public void TestMethod1()
{
    LoggerConfiguration loggerConfig = new LoggerConfiguration();    
    loggerConfig.MinimumLevel.Debug();                    
    loggerConfig.WriteTo.LiterateConsole();    
    loggerConfig.WriteTo.Seq("http://localhost:65454");    
}

如果我们参考net462项目,我们会得到相同的结果,因此我们认为它与VS 2017相关,而不是.NET框架版本。在VS 2015中,我们从未见过这样的错误。似乎存在一个问题:加载带有可选参数/匹配签名的DLL扩展,等等。该方法显然存在,否则它不会编译--为什么在运行时这个方法会崩溃呢?

如果我只使用本地nuget包,它就能正常工作--在.NET CSPROJ中通过.NET引用任何项目时,这似乎只是一个问题。它似乎没有正确地处理依赖树。

另一个使用KeyVault的示例,其中VS测试运行程序无法正确找到扩展方法.

测试执行错误(x86):KeyVault扩展

消息: System.MissingMethodException :方法未找到:'Void Microsoft.Azure.KeyVault.KeyVaultClient..ctor(AuthenticationCallback,System.Net.Http.DelegatingHandler[])‘。

单元测试示例- KeyVault

代码语言:javascript
复制
[Fact]
public void TestMethod1()
{
    KeyVaultClient _kvClient = new KeyVaultClient(new AuthenticationCallback(getKeyVaultToken));
}

private static async Task<string> getKeyVaultToken(string authority, string resource, string scope)
{
    var authContext = new AuthenticationContext(authority);
    ClientCredential clientCred = new ClientCredential("test", "account");
    AuthenticationResult result = authContext.AcquireTokenAsync(resource, clientCred).Result;

    if (result == null)
        throw new InvalidOperationException("Failed to obtain the JWT token");

    return result.AccessToken;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-09 16:12:18

dotnet test中发现这个奇怪的问题是双重的。在运行了dotnet test --diag并检查了输出之后,我意识到Microsoft.NET.Test.Sdk15.0.0版本掩盖了真正的问题。一旦我将nuget升级到15.3.0-preview-20170502-03,就出现了另一个例外。

错误来源: Microsoft.Rest.ClientRuntime

System.TypeLoadException:‘继承安全规则违反类型:'System.Net.Http.WebRequestHandler’。派生类型必须与基本类型的安全可访问性相匹配,否则不可访问性较低。

这很有趣-- MissingMethodException掩盖了隐藏在System.Net.Http中的真正问题。第二个认识是这个基库有一个错误,无法加载该类型。。一旦我4.3.1,问题就消失了,我的项目引用又开始工作了。

结论

更新到最新预览到最新版本,使用dotnet测试通过奇怪的MissingMethodException。你可以在这里跟踪github上的公开问题

备选方案2-不包括包参考资产

对于最新的VS 2017 CSPROJ格式,下面的配置也修正了这一点,因为它阻止将System.Net.Http复制到构建输出路径,默认情况下该路径加载GAC的版本4.0.0.0

代码语言:javascript
复制
<PackageReference Include="System.Net.Http" Version="4.3.1">
  <ExcludeAssets>All</ExcludeAssets>
</PackageReference>

选项3-程序集绑定重定向

dotnet核心将遵循您在app.config中放置的任何运行时绑定重定向,因此您必须将System.Net.Http的任何nuget依赖项重定向到version 4.1.*,您可以重定向到最新版本或恢复到上一个稳定版本4.0

代码语言:javascript
复制
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <!-- Another PackageReference dependency binds to 4.1.1 which is busted, we leverage .NET Core redirection and revert to CLR 4.0.0 -->
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="4.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
票数 14
EN

Stack Overflow用户

发布于 2021-03-23 15:19:51

I在测试一个依赖于正在测试的项目中更新的Nuget包的项目中的类时遇到了这个问题,但在测试项目中(它是缺少的方法的来源)。

解决方案非常简单,只需在测试项目中升级受影响的Nuget:

代码语言:javascript
复制
Right-Click the test project > Manage Nuget packages > Upgrade necessary packages
票数 0
EN

Stack Overflow用户

发布于 2021-12-22 19:32:58

我正在做一个SharePoint插件,插件已经安装在服务器上,我也在使用它来进行开发。因此,我认为DLL是在GAC中,而这个DLL是首先被捡起来的!

我是从测试跑步者那里得到MissingMethodException的。所以我想出了一个简单的解决办法。

更改AssemblyInfo.cs!中的版本号--这将使GAC中的版本号与bin/目录中的版本号有所不同,因此测试运行程序将使用正确的DLL。呼!

另请参阅:

System.MissingMethodException:方法没有找到吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43873978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档