System.TypeLoadException:从Load Test Plugin使用KeyVault时'方法'get_SerializationSettings'

问题描述 投票:6回答:2

我有一个负载测试,使用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版,负载测试工作正常。

.net azure visual-studio-2017 load-testing azure-keyvault
2个回答
0
投票

这是我在使用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;
        }

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


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>
© www.soinside.com 2019 - 2024. All rights reserved.