2016-11-20 21 views
21

üzerinde 'UserSecretsIdAttribute' bulunamadı lacivert için ASP.NET Çekirdek uygulamayı dağıtmaya ve siteyi açtıktan sonra aşağıdaki hatayı alıyorum:ınvalidoperationexception: montaj

InvalidOperationException: Could not find 'UserSecretsIdAttribute' on assembly '******, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

istisna ayrıntıları da hata olarak olur içerir Bu kod satırında Startup.cs:

builder.AddUserSecrets();

sadece son zamanlarda kullanıcı sırları modülüne bir güncelleme

cevap

31

yoktu ederiz. Sürüm 1.0.1 ve şimdi, kullanıcı sırlarının kimliğine veya geri dönüş olarak, daha önce project.json'da olduğu gibi bir montaj düzeyi özniteliği belirtmeniz gerekir. https://github.com/aspnet/Announcements/issues/209

Böyle .csproj sırlar id tanımlayabilirsiniz:

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

Bu aşağıdaki düzey derleme özniteliği üretir İşte

GitHub'dan duyurusudur. Alternatif olarak, onu .csproj dosyasına eklemek yerine, bunu kendiniz ekleyebilirsiniz. Startup.cs: Ayrıca

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

, kullanmak olmalıdır: Ben Başlangıç ​​sınıfı kullanılan bu durumda, belirli bir türden mecliste bu özelliğe arayacaktır

builder.AddUserSecrets<Startup>(); 

.

Not: Bu 2.0 kaldırılacaktır: Ben kullanıcı sırları yapılandırma için source code kontrol ve olmadan AddUserSecrets() çağırarak

builder.AddUserSecrets(); 

(1.0.2 ve 1.1.1 eskimiş bunu işaretlediğiniz) tipi yapar bu: Bu sizin aksamındaki UserSecretsId ayrıntısını bulmak için çalışıyor ve bu başarısız, bu project.json içinde bir bulabilsek kontrol ediyor

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); 

. Ardından (yorumlandığı gibi) proje, artık kullanımdan kaldırıldığı için şikayet etmek istemediğinden eksik öznitelik hakkında bir hata döndürür.

+0

Ayrıca, "UserSecretsId" özelliğine sahip olan projede "Microsoft.Extensions.Configuration.UserSecrets" bağımlılığınız yoksa, öznitelik oluşturulmaz. –

+0

Bu bağımlılığa sahip değilseniz, kullanıcı sırlarını hiç kullanamazsınız. – juunas

+0

Geçici olarak (bir çözümdeki birçok proje arasında ortak bir tabloyu paylaştığım bir "temel" proje ile) bağlıydım.Geçici olarak kullanırken, assembly özniteliği eksikti, ancak bağımlılığı doğrudan eklediğimde hata giderildi. –

2

Durumumdakiler için bu answer'a eklemek istiyorum.

Sırlar yöneticisini kullanmaya çalıştığımda (konsol uygulamaları için olduğundan emin olmadığından) bir .NET Core konsol uygulaması yazıyorum. Hatadan kendimi kurtarabilmemin tek yolu, sırlar yöneticisini kullandığım mecliste montaj seviyesi özelliğini kullanmaktı.

Dediğim gibi, sırlar yöneticisinin konsol uygulamaları için uygun olup olmadığından emin değilim. Belki de .xproj dosyaları vs .csproj dosyaları ile ilgili bir sorun var.

+0

"userSecretsId" öğesini "project.json" öğesine eklemeyi denediniz mi? – Alex78191

+0

@ Alex78191 projede zaten vardı. Bu hata, birden çok projeye geçiş yapmaya çalıştıktan sonra oldu. VS kodu kullanıyorum –