Не удалось найти атрибут UserSecretsIdAttribute в сборке, но он существует и добавлен правильный пакет.

Я следую этому руководству: https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-3.1&tabs=windows#access-a-secret

В проект.NET Core 3.1 я добавил Microsoft.Extensions.Configuration.UserSecrets пакет, я щелкнул проект, чтобы управлять секретами, файл был создан в AppData каталог и UserSecretsId был добавлен автоматически в .csprojфайл. Поскольку Host.CreateDefaultBuilder не загружал секреты решил добавить их вручную

 if (hostContext.HostingEnvironment.IsDevelopment())
        {
            builder.AddUserSecrets(Assembly.GetExecutingAssembly());
        }
    })
  .Build();

Но потом я получаю

System.InvalidOperationException
  HResult=0x80131509
  Message=Could not find 'UserSecretsIdAttribute' on assembly 'XXX'.
Check that the project for 'XXX' has set the 'UserSecretsId' build property.
If the 'UserSecretsId' property is already set then add a reference to the Microsoft.Extensions.Configuration.UserSecrets package.
  Source=Microsoft.Extensions.Configuration.UserSecrets

Я проверил предложение в описании expecion, и оба затруднения выполнены.

5 ответов

Здесь та же проблема. после проверки исходного кода в GitHubhttps://github.com/aspnet/Configuration/blob/f64994e0655659faefccead7ccb5c1edbfd4d4ba/src/Config.UserSecrets/UserSecretsConfigurationExtensions.cs#L94

Проверьте, есть ли у вас <GenerateAssemblyInfo>true</GenerateAssemblyInfo> в вашем файле.csproj.

Столкнулся с той же ошибкой во время выполнения. Я отключил автоматическое создание AssemblyInfo для сборки в csproj, потому что мой системный CI автоматически обновляет этот файл версией сборки

Мое решение - добавить

      [assembly: UserSecretsId ("<Project guid>")] 

в AssemblyInfo.

У вас должен быть указан UserSecretsId в вашем файле.csproj. Если вы щелкните правой кнопкой мыши слой API и управляете секретами пользователей, убедитесь, что GUID в каталоге AppData совпадает с тем, что есть в проекте.

<PropertyGroup>
<UserSecretsId>Your GUID</UserSecretsId>

Ваш класс Program.cs должен использовать CreateDefaultBuilder, вы должны увидеть, что есть раздел для включения секретов, когда среда является разработкой. Проверьте свой ASP "ASPNETCORE_ENVIRONMENT": "Development"настроен на разработку. Наконец, я предполагаю, что ваша исполняемая сборка имеет PropertyGroup для пользовательских секретов, упомянутых выше.

 public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });

Просто используйте контекстное меню в своем проекте и выберите "Управление секретами пользователя..." и сохраните пустой файл конфигурации секретов пользователя. Visual Studio должна автоматически создавать необходимые записи файла проекта.

System.InvalidOperationException: «Не удалось найти UserSecretsIdAttribute в сборке». Убедитесь, что в проекте для '' установлено свойство сборки UserSecretsId. Если свойство UserSecretsId уже установлено, добавьте ссылку на пакет Microsoft.Extensions.Configuration.UserSecrets».

Добавление этого пакета решило проблему. Microsoft.Extensions.Configuration.UserSecrets

Другие вопросы по тегам