2016-07-26 10 views
3

Я хочу интегрировать свой проект в ASP.NET Core 1.0 с Microsoft Azure KeyVault. Но похоже, что пакет Microsoft.Azure.KeyVault еще не совместим с инфраструктурой «netcoreapp1.0» (я пытаюсь загрузить пакет с помощью диспетчера пакетов NuGet и отображается сообщение об ошибке «несовместимый пакет»). Поэтому я импортировать «net451» рамку в project.json, показанном в этом блоке:Ядро ASP.NET с использованием Azure KeyVault - Ошибка при делегировании KeyVaultClient.AuthenticationCallback

"frameworks": { 
"netcoreapp1.0": { 
    "imports": [ 
    "net451", 
    "dotnet5.6", 
    "portable-net45+win8" 
    ] 
    } 
}, 

После импорта «net451» рамки, ошибка в настоящее время нет. Теперь я хочу, чтобы начать новый класс KeyVaultClient, показанный в этом блоке:

public void GetKeyVaultSecret() 
{ 
    var keyVaultClient = new KeyVaultClient(this.GetTokenAsync); 
    // .... 
} 

private async Task<string> GetTokenAsync(string authority, string resource, string scope) 
{ 
    var authenticationContext = new AuthenticationContext(authority); 
    var authenticationResult = 
     await authenticationContext.AcquireTokenAsync(resource, this.clientAssertionCertificate); 
    return authenticationResult.AccessToken; 
} 

Проблема в том, я получил сообщение об ошибке на this.GetTokenAsync, которую я имею искать решение в течение нескольких часов без удачи: Argument 1:cannot convert from 'method group' to 'KeyVaultClient.AuthenticationCallback'

Если я изменить

var keyVaultClient = new KeyVaultClient(this.GetTokenAsync); 

к:

var keyVaultClient = new KeyVaultClient((authority, resource, scope) => this.GetTokenAsync(authority, resource, string.Empty)); 

У меня все еще появилось сообщение об ошибке: Cannot convert lambda expression to type 'KeyVaultClient.AuthenticationCallback' because it is not a delegate type

Кто-нибудь знает, как решить эту проблему? Благодарю.

С уважением, Элвин

ответ

0

Итак, после долгого отказа от этого вопроса, я решил еще раз изучить его благодаря ответу @ fernacolo. Оказывается, в то время я использовал версию 1.0.0 пакета Microsoft.Azure.KeyVault (которая была последней версией тогда, показанной на рисунке 1). Теперь доступна версия 2.0.0 пакета, и когда я нахожу журнал изменений, я увидел сообщение https://docs.microsoft.com/en-us/azure/key-vault/key-vault-dotnet2api-release-notes, в котором говорилось, что «.NET Core поддерживается версией библиотеки .NET/C# версии 2.0 для Azure Key Vault».

enter image description here Рисунок 1. Версия История Microsoft.Azure.KeyVault пакета

Погрешность теперь ушел без необходимости импорта рамки «net451» в project.json.

1

cannot convert from 'method group' ошибка происходит потому, что у вас есть перегруженные или расширения (то есть более чем один метод) с именем GetTokenAsync. Попробуйте переименовать один из них, и он должен работать.

+0

Спасибо за ответ, я просто попытался воспроизвести эту проблему после отказа от нее в течение нескольких месяцев. Но похоже, что виновником был «пакет еще не поддерживал базовые рамки в то время»? Потому что в то время последняя версия пакета была 1.0.0, а теперь она 2.0.0. Поэтому я попытался найти журнал изменений, и я увидел это сообщение https://docs.microsoft.com/en-us/azure/key-vault/key-vault-dotnet2api-release-notes. В сообщении говорилось, что «.NET Core поддерживается версией библиотеки .NET/C# версии 2.0 для Azure Key Vault». Теперь он работает как шарм без необходимости импорта «net451». – samAlvin