簡體   English   中英

作為參數傳遞時未加載特定於環境的配置 - “未處理的異常無法映射應用程序設置部分”

[英]Environment specific config not loaded when passed as an argument - "Unhandled exception Failed to map app settings section"

我正在嘗試在新的 Windows 服務器上部署 dotnet core 3.0 Windows 服務。 我有一個創建服務的ps1腳本,如下所示:

$name = "DataTransformService"
$params = @{
  Name           = $name
  BinaryPathName = '"C:\services\transformService\DataTransform.Service.exe Test"'
  DisplayName    = $name
  StartupType    = "Automatic"
}
New-Service @params

但是,當我嘗試使用 Windows 上的Services應用程序啟動服務並啟動它時,我收到此錯誤: 在此處輸入圖像描述

當我嘗試使用二進制文件手動調用服務時:

C:\services\transformService\DataTransform.Service.exe Test

我收到此錯誤:

PS C:\services\transformService> C:\services\transformService\DataTransform.Service.exe Test
Configured for environment Test_ENVIRONMENT
Unhandled exception. System.MissingFieldException: Failed to map app settings section 'ConnectionStrings' as it wasn't found in appsettings.json or appsettings.Production.json. Add this section or remove class 'ConnectionStringsSettings' from the 'Core.Settings' namespace.
   at DataTransform.Service.StartupConfiguration.ConfigureSettingsExtensions.ConfigureSettingSection[T](IServiceCollection services, IConfiguration configuration, IHostEnvironment hostingEnvironment) in D:\_Code\DataTransform.Service\DataTransform.Service\StartupConfiguration\ConfigureSettingsExtensions.cs:line 48
   at DataTransform.Service.StartupConfiguration.ConfigureSettingsExtensions.ConfigureSettings(IServiceCollection services, IConfiguration configuration, IHostEnvironment hostingEnvironment) in D:\_Code\DataTransform.Service\DataTransform.Service\StartupConfiguration\ConfigureSettingsExtensions.cs:line 26
   at DataTransform.Service.Program.<>c.<CreateHostBuilder>b__1_2(HostBuilderContext hostContext, IServiceCollection services) in D:\_Code\DataTransform.Service\DataTransform.Service\Program.cs:line 47
   at Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider()
   at Microsoft.Extensions.Hosting.HostBuilder.Build()
   at DataTransform.Service.Program.Main(String[] args) in D:\_Code\DataTransform.Service\DataTransform.Service\Program.cs:line 15

我定義了一些環境,如下所示:

在此處輸入圖像描述

這是我的Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args)
            .Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseWindowsService()
            .ConfigureHostConfiguration((configBuilder) =>
            {
                if (args.Length > 0 && !string.IsNullOrEmpty(args[0]) && !string.IsNullOrWhiteSpace(args[0]))
                {
                    Console.WriteLine($"Configured for environment {args[0]}_ENVIRONMENT");
                    configBuilder.AddEnvironmentVariables($"{args[0]}_");
                }
                else
                {
                    var environmentName = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT");
                    Console.WriteLine($"Configured for environment {environmentName}");
                    configBuilder.AddEnvironmentVariables();
                }
            })
            .ConfigureLogging(...)
            .ConfigureServices(...);
}


這是我的appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    },
    "EventLog": {
      "LogLevel": {
        "Default": "Information",
        "Microsoft.Hosting.Lifetime": "Information"
      }
    }
  },
  "Worker": {
    "TargetDatabaseName": "TransformedData",
    ...
  }
}

這是appsettings.Test.json

{
  "ConnectionStrings": {
    <connection strings here>
  },
  "Environment": {
    "Name": "Test"
  },
  "Worker": {
    ...
  }
}

我在這里想念什么?

幾天前我也遇到了同樣的問題,太奇怪了。 問題是當通過CmdPowershell執行您的應用程序並假設它們在路徑C:\Users\YourName上運行時,它會嘗試在此路徑C:\Users\YourName\appsettings.json !! (如果您在該路徑中復制/粘貼您的 appsettings.json,您的應用將運行)。

因此,為了解決這個問題,您需要像這樣指定基本路徑:

 .ConfigureHostConfiguration((configBuilder) =>
            {
              configBuilder.Sources.Clear();
              configBuilder.SetBasePath(
 
               Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location))
               .AddJsonFile("./appsettings.json", true, true)
               .AddJsonFile($"./appsettings.{args[0]}.json", true, true);


                if (args.Length > 0 && !string.IsNullOrEmpty(args[0]) && !string.IsNullOrWhiteSpace(args[0]))
                {
                    Console.WriteLine($"Configured for environment {args[0]}_ENVIRONMENT");
                    configBuilder.AddEnvironmentVariables($"{args[0]}_");
                }
                else
                {
                    var environmentName = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT");
                    Console.WriteLine($"Configured for environment {environmentName}");
                    configBuilder.AddEnvironmentVariables();
                }
            })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM