Как я могу совместно использовать конфигурационный файл, например appsettings.json, в нескольких проектах ASP.NET CORE в одном решении в Visual Studio 2015?

У меня есть 3 проекта ASP.NET CORE в одном решении, и я хочу поделиться информацией о строках соединения в одном файле конфигурации, например appsettings.json, в этих проектах.

Как это сделать в Visual Studio 2015?

Ответ 1

Вы можете использовать абсолютный путь для каждого проекта, как это (я предполагаю, что файл appsettings.json находится в корневом каталоге решения (например, global.json)):

var settingPath = Path.GetFullPath(Path.Combine(@"../../appsettings.json")); // get absolute path
var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile(settingPath);

см. https://github.com/aspnet/Configuration/issues/440

Ответ 2

Установите абсолютный путь к общему файлу appsettings.json.

var relativePath = @"../../The/Relative/Path";
var absolutePath = System.IO.Path.GetFullPath(relativePath);

Затем используйте IFileProvider.

var fileProvider = 
    new Microsoft.Extensions.FileProviders.PhysicalFileProvider(absolutePath);

_configuration = new ConfigurationBuilder()
    .SetBasePath(_env.ContentRootPath)
    .AddJsonFile(fileProvider, $"appsettings.json", optional: true, reloadOnChange: true)
    .Build();

Или используйте SetBasePath, как это.

var relativePath = @"../../The/Relative/Path";
var absolutePath = System.IO.Path.GetFullPath(relativePath);

_configuration = new ConfigurationBuilder()
    .SetBasePath(absolutePath)
    .AddJsonFile($"appsettings.json", optional: true, reloadOnChange: true)
    .Build();

Оба будут работать, хотя подход к файловому провайдеру позволяет приложению использовать свой корневой контент в качестве базового пути для другого статического контента. Подход Adem также хорош.

Ответ 3

Там может быть лучший способ сделать это, но вы можете добиться этого, добавив параметр precompile в файл project.json. Нечто похожее на:

"scripts": {
  "precompile": [ "../copycommand.bat" ]
}

Где copycommand указывает на командную команду, которая копирует ваш файл AppSettings.json в текущий каталог. Если вы настроите таргетинг на несколько платформ, вам, вероятно, потребуется настроить команду для каждой из платформ.

Ответ 4

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

В качестве бонуса вы получаете строки подключения за пределами вашего приложения и уменьшаете вероятность их утечки из-за того, что они были введены в исходный код.