我有一个负载测试,使用Key Vault
预先验证Web请求。一旦代码尝试调用内部使用KeyVaultClient
类的方法,就会抛出以下异常:
System.TypeLoadException:来自程序集“Microsoft.Azure.KeyVault,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”的类型为“Microsoft.Azure.KeyVault.KeyVaultClient”的'方法'get_SerializationSettings'没有实现。
我试图将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.2版,负载测试工作正常。
这是我在使用3.0.3库访问密钥库客户端时在我的代码中使用它的东西,它对我有用。试试这个,看看它是否有效。
Uri ADL_TOKEN_AUDIENCE = new Uri(urlAudience);
var client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetAccessToken));
public static async Task<string> GetAccessToken(string azureTenantId, string azureAppId, string azureSecretKey)
{
var context = new AuthenticationContext(ConfigurationManager.AppSettings.Get("Authority") + tenantId);
ClientCredential clientCredential = new ClientCredential(appId, secretKey);
var tokenResponse = await context.AcquireTokenAsync(ConfigurationManager.AppSettings.Get("VaultUrl"), clientCredential);
var accessToken = tokenResponse.AccessToken;
return accessToken;
}
尝试以这种方式获取令牌,它应该工作。
问题是负载测试使用主机进程“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>