Общий файл appsettings.json между веб-сайтом и консольным проектом VS.Net Core - PullRequest
0 голосов
/ 04 февраля 2019

Я устанавливаю файл appsettings.json для совместного использования между любыми проектами .net Core (Web, Console и Library).Я настроил общий файл, следуя инструкциям этого поста https://andrewlock.net/sharing-appsettings-json-configuration-files-between-projects-in-asp-net-core/, но я не могу прочитать файл в консольном проекте.

это код, который я пробовал

    static void Main(string[] args)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("SharedSettings.json", optional: true, 
            reloadOnChange: true);

        IConfigurationRoot configuration = builder.Build();

        Console.WriteLine("Connection string: " + configuration.GetConnectionString("DefaultConnection"));
        Console.WriteLine("Hello World!");
        Console.Write("Press any key to continue...");
        Console.ReadKey(true);
    }

это структура моего проекта

enter image description here

inмой проект веб-код для чтения файла это, мне нужно прочитать общий .json в проекте другого.

  public static IWebHost BuildWebHost(string[] args) =>
     WebHost.CreateDefaultBuilder(args)
     .UseContentRoot(Directory.GetCurrentDirectory())
     .ConfigureAppConfiguration((hostingContext, config) => {
      IHostingEnvironment env = hostingContext.HostingEnvironment;

  // find the shared folder in the parent folder
  var sharedFolder = Path.Combine(env.ContentRootPath, "..", "Shared");

  //load the SharedSettings first, so that appsettings.json overrwrites it
  config
   .AddJsonFile(Path.Combine(sharedFolder, "SharedSettings.json"), optional: true) // When running using dotnet run
   .AddJsonFile("SharedSettings.json", optional: true) // When app is published
   .AddJsonFile("appsettings.json", optional: true)
   .AddJsonFile($ "appsettings.{env.EnvironmentName}.json", optional: true);

  config.AddEnvironmentVariables();
 })
 .UseStartup < Startup > ()
 .Build();

1 Ответ

0 голосов
/ 04 февраля 2019

Без вашей ConfigurationBuilder реализации и способа передачи IConfiguration вашим зависимостям.Например, являются ли они автономными приложениями?

Для другого приложения вы можете достичь желаемого результата, выполнив следующие действия:

  1. В файле appsettings.json в решении откройте свойства.
  2. Сборка в выходной каталог.

Когда вы находитесь в Visual Studio, приложение должно читать ваш appsettings.json без проблем.Для своего решения я создал каталог с именем Configuration с двумя подкаталогами Development и Production.Теперь при сборке Visual Studio она должна соответствовать указанной выше конфигурации, но для создания отдельного каталога Build, который не является частью вашего бина, я использовал скрипт PowerShell.

Param($configuration="Development")

if($configuration.ToUpper().StartsWith("P")) {
     $configuration="Production"
} else {
     $configuration="Development"
}

if((Test-Path .\Build)) {
     Remove-Item -r -fo .\Build
}

New-Item -ItemType Directory .\Build | Out-Null
dotnet publish --configuration Release --runtime win81-x64 --verbosity Quiet --self-contained true
Copy-Item -r .\bin\Release\netcoreapp2.1\win81-x64\publish\* .\Build\

Remove-Item .\Build\*.pdb
Remove-Item .\Build\appsettings.json

Copy-Item .\Configuration\$configuration\appsettings.json .\Build\
Copy-Item ".\Configuration\Deployment Resources\Script\*.ps1" .\Build\
Copy-Item ".\Configuration\Deployment Resources\Task\*.xml" .\Build\

echo "`n`n"
Write-Host "╭ ─────────────────────────── ╮"
Write-Host "         $configuration              "
Write-Host "╰ ─────────────────────────── ╯"
echo "`n`n"

Для сборки я перехожу к своемурешение в командной строке и просто выполните: .\Build.ps1 Production или .\Build.ps1, и это создаст для меня действительный каталог сборки.Вы можете игнорировать некоторые другие компоненты, так как они предназначены для запланированной задачи, установки сценариев и т. Д., Которые мы также включаем, поэтому при использовании сценария развертывания все переносится на удаленный сервер.

Я изменю ответкак только вы предоставите больше информации о том, как другие ваши проекты связаны с вашим веб-решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...