[英].net core Worker Service (BackgroundService) cannot load user secrets
拥有具有 .net core 版本 3.1.8 和 asp.net core 版本 3.1.8 的 .net core worker 服务我在从 worker 服务加载用户密码时遇到问题,但是在 asp.net core 项目中同样有效。
从 asp.net core 和 .net core worker 服务调用的通用方法
public static string GetFioApiKey(this IConfiguration configuration)
=> configuration["PaymentServiceSecrets:FioApiKey"];
具有.net核心版本3.1.8和asp.net核心版本3.1.8的.net核心工作程序服务,我遇到了从工作程序服务加载用户机密的问题,但是在asp.net核心项目中也是如此。
从asp.net核心和.net核心工作程序服务调用的通用方法
public static string GetFioApiKey(this IConfiguration configuration)
=> configuration["PaymentServiceSecrets:FioApiKey"];
工人服务的csproj
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UserSecretsId>8d19c97d-a2fb-4a51-a694-9635b9c0c42c</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.8" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.1.8" />
</ItemGroup>
</Project>
工人服务的startup.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(config => config.AddUserSecrets(Assembly.GetExecutingAssembly()))
.ConfigureServices((hostContext, services) =>
{
// simplified
services.AddSingleton<IApplicationSettings>(applicationSettings =>
{
var appSettings = new ApplicationSettings
{
FioApiKey = config.GetFioApiKey()
};
return appSettings;
});
services.AddHostedService<Worker>();
});
}
具有.net核心版本3.1.8和asp.net核心版本3.1.8的.net核心工作程序服务,我遇到了从工作程序服务加载用户机密的问题,但是在asp.net核心项目中也是如此。
从asp.net核心和.net核心工作程序服务调用的通用方法
public static string GetFioApiKey(this IConfiguration configuration)
=> configuration["PaymentServiceSecrets:FioApiKey"];
工人服务的csproj
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UserSecretsId>8d19c97d-a2fb-4a51-a694-9635b9c0c42c</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.8" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.1.8" />
</ItemGroup>
</Project>
工人服务的startup.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(config => config.AddUserSecrets(Assembly.GetExecutingAssembly()))
.ConfigureServices((hostContext, services) =>
{
// simplified
services.AddSingleton<IApplicationSettings>(applicationSettings =>
{
var appSettings = new ApplicationSettings
{
FioApiKey = config.GetFioApiKey()
};
return appSettings;
});
services.AddHostedService<Worker>();
});
}
具有.net核心版本3.1.8和asp.net核心版本3.1.8的.net核心工作程序服务,我遇到了从工作程序服务加载用户机密的问题,但是在asp.net核心项目中也是如此。
从asp.net核心和.net核心工作程序服务调用的通用方法
public static string GetFioApiKey(this IConfiguration configuration)
=> configuration["PaymentServiceSecrets:FioApiKey"];
工人服务的csproj
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UserSecretsId>8d19c97d-a2fb-4a51-a694-9635b9c0c42c</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.8" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.1.8" />
</ItemGroup>
</Project>
工人服务的startup.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(config => config.AddUserSecrets(Assembly.GetExecutingAssembly()))
.ConfigureServices((hostContext, services) =>
{
// simplified
services.AddSingleton<IApplicationSettings>(applicationSettings =>
{
var appSettings = new ApplicationSettings
{
FioApiKey = config.GetFioApiKey()
};
return appSettings;
});
services.AddHostedService<Worker>();
});
}
具有.net核心版本3.1.8和asp.net核心版本3.1.8的.net核心工作程序服务,我遇到了从工作程序服务加载用户机密的问题,但是在asp.net核心项目中也是如此。
从asp.net核心和.net核心工作程序服务调用的通用方法
public static string GetFioApiKey(this IConfiguration configuration)
=> configuration["PaymentServiceSecrets:FioApiKey"];
工人服务的csproj
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UserSecretsId>8d19c97d-a2fb-4a51-a694-9635b9c0c42c</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.8" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.1.8" />
</ItemGroup>
</Project>
工人服务的startup.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(config => config.AddUserSecrets(Assembly.GetExecutingAssembly()))
.ConfigureServices((hostContext, services) =>
{
// simplified
services.AddSingleton<IApplicationSettings>(applicationSettings =>
{
var appSettings = new ApplicationSettings
{
FioApiKey = config.GetFioApiKey()
};
return appSettings;
});
services.AddHostedService<Worker>();
});
}
对于 .net core 3.1 及更高版本,您需要手动添加对 nuget 包的引用
Microsoft.Extensions.Configuration.UserSecrets
然后用户机密将自动加载到 IConfiguration 实例中,您可以通过依赖注入获得。
这直接从新的项目模板开始工作,不需要任何进一步的代码来配置它。
可以在此 github 问题上找到更多详细信息: https : //github.com/dotnet/extensions/issues/2743
此问题似乎已在 .NET 6 中得到修复,因此您不再需要直接引用Microsoft.Extensions.Configuration.UserSecrets
。
但是,如果您出于某种原因在.csproj
文件中设置了<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
,则不会使用<UserSecretsId>
值。 即,由于项目中的遗留原因,我不得不这样做。
要让您的工作人员服务项目识别secrets.json
文件,您应该将全局属性[assembly: UserSecretsId]
添加到您的自定义AssemblyInfo.cs
文件或项目中的任何其他.cs
文件。 IE:
[assembly: UserSecretsId("dotnet-Worker-12345678-1234-ABCD-5678-1234567890ABCDEF")]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.