我有一个负载测试,该负载测试使用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版,则负载测试正常。
答案 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>