System.TypeLoadException: 'метод' get_SerializationSettings 'при использовании KeyVault из подключаемого модуля Load Test - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть нагрузочный тест, который использует Key Vault для предварительной проверки подлинности веб-запросов.Как только код пытается вызвать метод, который использует класс KeyVaultClient, возникает следующее исключение:

System.TypeLoadException: 'Method' get_SerializationSettings 'в типе' Microsoft.Azure.KeyVault.KeyVaultClient «из сборки» Microsoft.Azure.KeyVault, версия = 3.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 'не имеет реализации.

Я попытался понизить нюгет KeyVault доверсия 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.Если я возвращаюсь к v. 2.3.18, нагрузочный тест работает нормально.

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Проблема заключается в том, что в нагрузочном тесте используется файл app.config из хост-процесса "QTAgent_40.exe":

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>
0 голосов
/ 28 февраля 2019

Вот кое-что, что я использовал в своем коде при доступе к клиенту keyvault с использованием библиотеки 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;
        }

Попробуйте получить токен таким образом, он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...