2016-11-20 18 views
21

Sau khi triển khai ứng dụng ASP.NET Core xanh và mở trang web, tôi nhận được lỗi sau:InvalidOperationException: Không thể tìm thấy 'UserSecretsIdAttribute' về lắp ráp

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

Các chi tiết ngoại lệ cũng bao gồm các lỗi xảy ra ở Startup.cs trên dòng mã này:

builder.AddUserSecrets();

Cảm ơn bạn

Trả lời

31

Có một cập nhật cho các mô-đun bí mật người dùng chỉ cần thời gian gần đây. Phiên bản 1.0.1 trở lên bây giờ yêu cầu bạn chỉ định một thuộc tính mức assembly cho id của các bí mật của người dùng, hoặc như một dự phòng, cách mà nó đã có trước đó trong project.json.

Đây là thông báo trên GitHub: https://github.com/aspnet/Announcements/issues/209

Bạn có thể xác định những bí mật id trong csproj như thế này:

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

này tạo ra các thuộc tính lắp ráp cấp sau. Ngoài ra, thay vì thêm nó vào tệp .csproj, bạn có thể tự thêm nó, ví dụ: để Startup.cs:

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

Ngoài ra, bạn nên sử dụng:

builder.AddUserSecrets<Startup>(); 

Nó sẽ tìm kiếm cho rằng thuộc tính trong lắp ráp các loại nhất định, trong trường hợp này tôi đã sử dụng lớp Startup.

Lưu ý: đây sẽ hết hạn vào 2.0: (1.0.2 và 1.1.1 đã đánh dấu nó lỗi thời)

builder.AddUserSecrets(); 

Tôi đã kiểm tra source code cho cấu hình bí mật người dùng, và kêu gọi AddUserSecrets() mà không có sự loại thực hiện điều này:

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

nó đang cố gắng tìm ra UserSecretsId thuộc tính về lắp ráp của bạn, nhưng thất bại đó, kiểm tra nếu nó có thể tìm thấy nó trong project.json. Sau đó (như bình luận) trả về một lỗi về thuộc tính còn thiếu vì họ không muốn phàn nàn về project.json nữa vì nó không được dùng nữa.

+0

Ngoài ra, nếu bạn không có phụ thuộc 'Microsoft.Extensions.Configuration.UserSecrets' trong dự án có thuộc tính' UserSecretsId', thuộc tính sẽ không được tạo. –

+0

Nếu bạn không có sự phụ thuộc đó, tôi không nghĩ bạn có thể sử dụng bí mật của người dùng. – juunas

+0

Tôi đã phụ thuộc vào trong thoáng qua (thông qua một "cơ sở" dự án tôi đã chia sẻ boilerplate giữa nhiều dự án trong một giải pháp).Khi tôi sử dụng nó một cách thoáng qua, thuộc tính assembly bị thiếu, nhưng khi tôi thêm trực tiếp sự phụ thuộc, lỗi đã biến mất. –

2

Tôi muốn thêm vào điều này answer, cho những người trong tình huống của tôi.

Tôi đang viết ứng dụng giao diện điều khiển .NET Core, cố gắng sử dụng trình quản lý bí mật (không chắc chắn nó có nghĩa là dành cho ứng dụng giao diện điều khiển). Cách duy nhất tôi đã có thể thoát khỏi bản thân mình của lỗi đã được sử dụng thuộc tính cấp lắp ráp trên lắp ráp, nơi tôi đã được sử dụng quản lý bí mật.

Như tôi đã nói, tôi không chắc liệu người quản lý bí mật có dành cho ứng dụng trên bàn điều khiển hay không. Vì vậy, có thể có sự cố với tệp .xproj so với tệp .csproj.

+0

Bạn đã cố thêm 'userSecretsId' vào' project.json' chưa? – Alex78191

+0

@ Alex78191 tôi đã có nó trong project.json lỗi này xảy ra sau khi tôi đã cố gắng di chuyển đến nhiều dự án. Tôi đang sử dụng mã VS –

Các vấn đề liên quan