2016-11-20 13 views

Odpowiedz

31

było to aktualizacja modułu tajemnic użytkownik niedawno. Wersja 1.0.1 i nowsze wymaga teraz określenia atrybutu na poziomie zespołu dla identyfikatora tajnego klucza użytkownika lub jako rezerwowego, tak jak poprzednio w pliku project.json.

Oto zapowiedź na GitHub: https://github.com/aspnet/Announcements/issues/209

Można zdefiniować id tajemnic w .csproj jak ten:

<PropertyGroup> 
    <UserSecretsId>aspnet-TestApp-ce345b64-19cf-4972-b34f-d16f2e7976ed</UserSecretsId> 
</PropertyGroup> 

Generuje następujący atrybut montaż poziomu. Zamiast dodawać je do pliku .csproj, możesz oczywiście dodać go samodzielnie, np. do Startup.cs:

[assembly: UserSecretsId("aspnet-TestApp-ce345b64-19cf-4972-b34f-d16f2e7976ed")] 

Ponadto, należy użyć:

builder.AddUserSecrets<Startup>(); 

To będzie szukać tego atrybutu w zespole danego typu, w tym przypadku użyłem klasy startowego.

Uwaga: to będzie przestarzałe w 2.0: (1.0.2 i 1.1.1 zostały oznaczone je przestarzałe)

builder.AddUserSecrets(); 

Sprawdziłem source code dla konfiguracji tajemnic użytkowników i dzwoni bez AddUserSecrets() typ to robi:

var attribute = entryAssembly.GetCustomAttribute<UserSecretsIdAttribute>(); 
if (attribute != null) 
{ 
    return AddUserSecrets(configuration, attribute.UserSecretsId); 
} 

// try fallback to project.json for legacy support 
try 
{ 
    var fileProvider = configuration.GetFileProvider(); 
    return AddSecretsFile(configuration, PathHelper.GetSecretsPath(fileProvider)); 
} 
catch 
{ } 

// Show the error about missing UserSecretIdAttribute instead an error about missing 
// project.json as PJ is going away. 
throw MissingAttributeException(entryAssembly); 

on próbuje znaleźć atrybut UserSecretsId na swoim zespole, a w przypadku jego braku, sprawdzając, czy to może go znaleźć w project.json. Następnie (w komentarzach) zwraca błąd dotyczący brakującego atrybutu, ponieważ nie chcieliby już narzekać na projekt.json, ponieważ jest on przestarzały.

+0

Ponadto, jeśli nie masz zależności 'Microsoft.Extensions.Configuration.UserSecrets' w projekcie, który ma właściwość' UserSecretsId', atrybut nie zostanie utworzony. –

+0

Jeśli nie masz takiej zależności, nie sądzę, aby w ogóle można było używać tajemnic użytkownika. – juunas

+0

Zależało mi na przejściach (poprzez "bazowy" projekt miałem wspólne bloki pomiędzy wieloma projektami w rozwiązaniu).Kiedy używałam go przejściowo, brakowało atrybutu złożenia, ale gdy dodałem zależność bezpośrednio, błąd zniknął. –

2

Chcę dodać do tego answer, dla tych w mojej sytuacji.

Piszę aplikację konsoli .NET Core, próbując użyć menedżera sekretów (nie jestem pewien, czy jest to przeznaczone dla aplikacji konsolowych). Jedynym sposobem, w jaki udało mi się pozbyć tego błędu, było użycie atrybutu poziomu zespołu w zespole, w którym korzystałem z menedżera tajnych kluczy.

Tak jak powiedziałem, nie jestem pewien, czy menedżer sekretów jest przeznaczony dla aplikacji konsolowych. Może więc istnieje problem z plikami .xproj a plikami .csproj.

+0

Czy próbowałeś dodać 'userSecretsId' do' project.json'? – Alex78191

+0

@ Alex78191 Już miałem to w project.json ten błąd się wydarzył po tym, jak próbowałem migrować do wielu projektów. Używam kodu VS –

Powiązane problemy