#asp.net-core #secretsmanager
#asp.net-core #secretsmanager
Вопрос:
Я следую этому руководству: https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-3.1amp;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, и оба затруднения выполнены.
Ответ №1:
Здесь та же проблема. после проверки исходного кода в GitHub https://github.com/aspnet/Configuration/blob/f64994e0655659faefccead7ccb5c1edbfd4d4ba/src/Config .UserSecrets/ UserSecretsConfigurationExtensions.cs #L94
Проверьте, есть ли у вас <GenerateAssemblyInfo>true</GenerateAssemblyInfo>
в вашем файле .csproj.
Комментарии:
1. Я использовал общую сборку, поэтому мне нужно добавить этот параметр вручную в код (время выполнения) и на уровне проекта (время компиляции для VS).
2. атрибут var = сборка. GetCustomAttribute<UserSecretsIdAttribute>(); не сможет получить UserSecretsId в .csproj, если для GenerateAssemblyInfo установлено значение false. попробуйте отладить этот код
3. @Mike. Вы можете добавить его в startup class или SharedAssemblyInfo.cs
[assembly: UserSecretsId("XXXguidXXX")]
4. @Yoda Добавление его в SharedAssemblyInfo.cs сделало свое дело, еще раз спасибо!
5. @Yoda — У меня была такая же проблема, и я исправил ее таким же образом. Мне потребовалось несколько часов, чтобы найти этот ответ. Большое спасибо за решение!
Ответ №2:
Столкнулся с той же ошибкой во время выполнения. Я отключил автоматическое создание AssemblyInfo
сборки for в csproj
, потому что мой системный CI автоматически обновляет этот файл версией сборки
Мое исправление заключается в добавлении
[assembly: UserSecretsId ("<Project guid>")]
в AssemblyInfo
.
Комментарии:
1. У меня была такая же проблема. В начале AssemblyInfo был сгенерирован автоматически, поэтому все работало нормально. Затем внезапно мне нужно установить для <GenerateAssemblyInfo> значение false, и все рухнуло по частям. Мне потребовалось несколько часов, чтобы выяснить это. Кто знает, что изменение информации о сборке может нарушить секреты. json да?
2. Это решение также работало для меня в проекте .NET Framework 4.8
Ответ №3:
У вас должен быть UserSecretsId, указанный в вашем файле .csproj. Если вы щелкните правой кнопкой мыши на уровне API и управляйте пользовательскими секретами, подтвердите, что идентификатор GUID совпадает в каталоге AppData с тем, что есть в проекте.
<PropertyGroup>
<UserSecretsId>Your GUID</UserSecretsId>
Ваш класс Program.cs должен использовать CreateDefaultBuilder, вы должны увидеть, что есть раздел для включения секретов при разработке среды. Убедитесь, что ваш ASP "ASPNETCORE_ENVIRONMENT": "Development"
настроен на разработку. Наконец, я предполагаю, что ваша исполняемая сборка имеет группу свойств для пользовательских секретов, упомянутых выше.
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Комментарии:
1. Все, что вы предоставили, уже сделано. Однако у меня есть файл SharedAssemblyInfo.cs в свойствах проекта, и если я добавлю туда идентификатор, он будет загружен во время выполнения, однако VS также нуждается в нем в csproj, чтобы знать о файле secrets. Это странно.
Ответ №4:
Просто используйте контекстное меню в своем проекте и выберите «Управление пользовательскими секретами …» и сохраните пустой файл конфигурации пользовательских секретов. Visual Studio должна автоматически создавать необходимые записи файла проекта.
Комментарии:
1. Я собирался сделать именно это, но по какой-то причине Visual Studio не удалось включить эту опцию в контекстное меню. Он также был скрыт из меню проекта. В этот момент я начал искать в интернете и оказался здесь.
Ответ №5:
Система.Исключение InvalidOperationException: «Не удалось найти ‘UserSecretsIdAttribute’ в сборке «. Убедитесь, что в проекте для » установлено свойство сборки ‘UserSecretsId’. Если свойство ‘UserSecretsId’ уже установлено, добавьте ссылку на Microsoft.Расширения.Конфигурация.UserSecrets package.’
Добавление этого пакета решило проблему. Майкрософт.Расширения.Конфигурация.UserSecrets