System.TypeLoadException:从负载测试插件使用KeyVault时,“方法'get_SerializationSettings”

时间:2019-02-27 21:55:27

标签: .net azure visual-studio-2017 load-testing azure-keyvault

我有一个负载测试,该负载测试使用Key Vault对Web请求进行预身份验证。 一旦代码尝试调用内部使用KeyVaultClient类的方法,就会引发以下异常:

  

System.TypeLoadException:类型中的“方法'get_SerializationSettings'   程序集中的“ Microsoft.Azure.KeyVault.KeyVaultClient”   'Microsoft.Azure.KeyVault,版本= 3.0.0.0,文化=中性,   PublicKeyToken = 31bf3856ad364e35'没有实现。

我曾尝试将KeyVault nuget降级到版本2.0.6,但是我收到相同的错误,版本为2.0.0.0。

我正在使用.NET Framework 4.7.2和Visual Studio 2017 v.15.9.7

更新:当nuget Microsoft.Rest.ClientRuntime nuget(由Microsoft.Azure.KeyVault引用)更新到版本2.3.20时,出现此问题。如果我将其回滚至2.3.18版,则负载测试正常。

2 个答案:

答案 0 :(得分:0)

这是我在使用3.0.3库访问keyvault客户端时在代码中使用的东西,它对我有用。 在下面尝试一下,看看是否可行。

Visual C++ Build Tools

Uri ADL_TOKEN_AUDIENCE = new Uri(urlAudience);
                var client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetAccessToken));

尝试以这种方式获取令牌,它应该可以工作。

答案 1 :(得分:0)

问题是负载测试使用主机进程“ QTAgent_40.exe”中的app.config:

C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ QTAgent_40.exe.config

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
    <bindingRedirect oldVersion="4.5.0.0-9.0.0.0" newVersion="9.0.0.0"/>
</dependentAssembly>

Newtonsoft.Json-dll是从文件夹“ C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ PrivateAssemblies”(版本9.0)加载的。 但是Microsoft.Rest.ClientRuntime 2.3.19(及更高版本)需要Newtonsoft.Json 10.0。

解决方案:

C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ QTAgent_40.exe.config

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
    <bindingRedirect oldVersion="4.5.0.0-12.0.0.0" newVersion="12.0.0.0"/>
</dependentAssembly>