programing

잘못된 작업예외:어셈블리에서 'UserSecretsIdAttribute'를 찾을 수 없습니다.

newstyles 2023. 5. 24. 21:46

잘못된 작업예외:어셈블리에서 'UserSecretsIdAttribute'를 찾을 수 없습니다.

ASP.NET Core 앱을 zure에 배포하고 사이트를 연 후 다음 오류가 발생합니다.

잘못된 작업예외:어셈블리 '******, 버전=1.0.0.0, Culture=neutral, PublicKey에서 'UserSecretsIdAttribute'를 찾을 수 없습니다.Token=proxy'입니다.

예외 세부 정보에는 다음 코드 줄에서 Startup.cs 에서 오류가 발생한다는 내용도 포함됩니다.

건축업자사용자 암호 추가();

감사해요.

최근에 사용자 비밀 모듈에 대한 업데이트가 있었습니다.버전 1.0.1 이상에서는 사용자 암호 ID에 대한 어셈블리 수준 속성을 지정하거나 이전에 project.json에 있었던 방식으로 대체해야 합니다.

GitHub: https://github.com/aspnet/Announcements/issues/209 에 대한 공지입니다.

다음과 같이 .csproj에서 secret id를 정의할 수 있습니다.

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

그러면 다음과 같은 어셈블리 수준 특성이 생성됩니다.또는 .tftroj 파일에 추가하는 대신 Startup.cs 에 직접 추가할 수 있습니다.

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

또한 다음을 사용해야 합니다.

builder.AddUserSecrets<Startup>();

지정된 유형의 어셈블리에서 해당 속성을 검색합니다. 이 경우 Startup 클래스를 사용했습니다.

참고: 이 기능은 2.0:에서 더 이상 사용되지 않습니다(1.0.2 및 1.1.1에서는 더 이상 사용되지 않는 것으로 표시됨)

builder.AddUserSecrets();

소스 코드에서 사용자 비밀 설정과 호출을 확인했습니다.AddUserSecrets()유형을 지정하지 않으면 다음 작업이 수행됩니다.

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

그것은 그것을 찾기 위해 노력하고 있습니다.UserSecretsId어셈블리의 속성을 확인하고 실패하면 project.json에서 찾을 수 있는지 확인합니다.그런 다음 (댓글이 있는 대로) 누락된 속성에 대한 오류를 반환합니다. 이 속성은 더 이상 사용되지 않으므로 project.json에 대해 불평하고 싶지 않습니다.

저는 제 상황에 있는 사람들을 위해 이 답변에 추가하고 싶습니다.

.NET Core 콘솔 앱을 작성하고 있으며, 비밀 관리자를 사용하려고 합니다(콘솔 앱용인지는 확실하지 않습니다).오류를 제거할 수 있는 유일한 방법은 비밀 관리자를 사용하던 어셈블리의 어셈블리 수준 속성을 사용하는 것이었습니다.

말씀드렸듯이, 저는 비밀 관리자가 콘솔 앱을 위한 것인지 확실하지 않습니다..xproj 파일과 .csproj 파일에 문제가 있을 수 있습니다.

나의.NET Core 3.1 Worker Service에는 웹 프로젝트 이상의 추가 설치가 필요했습니다.

Program.cs에 시대에CreateHostBuilder내가 필요로 했던 방법:

.ConfigureAppConfiguration((ctx, builder) =>
                {
                    // enable secrets in development
                    if (ctx.HostingEnvironment.IsDevelopment())
                    {
                        builder.AddUserSecrets<Worker>();
                    }
                })

하지만 (내 웹 프로젝트와 달리) 이것을 명시적으로 추가해야 했습니다.nuget package:

install-package Microsoft.Extensions.Configuration.UserSecrets

그 후에 저는 비밀에 접근할 수 있었습니다.

언급URL : https://stackoverflow.com/questions/40704760/invalidoperationexception-could-not-find-usersecretsidattribute-on-assembly