繁体   English   中英

".net core Worker Service (BackgroundService) 无法加载用户机密"

[英].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>();
                });
    }

找到了指向github问题的链接,试图应用解决方法,但仍然无法正常工作

具有.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>();
                });
    }

找到了指向github问题的链接,试图应用解决方法,但仍然无法正常工作

具有.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>();
                });
    }

找到了指向github问题的链接,试图应用解决方法,但仍然无法正常工作

具有.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>();
                });
    }

找到了指向github问题的链接,试图应用解决方法,但仍然无法正常工作

对于 .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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM