У меня есть 3 проекта ASP.NET CORE в одном решении, и я хочу поделиться информацией о строках соединения в одном файле конфигурации, например appsettings.json, в этих проектах.
Как это сделать в Visual Studio 2015?
У меня есть 3 проекта ASP.NET CORE в одном решении, и я хочу поделиться информацией о строках соединения в одном файле конфигурации, например appsettings.json, в этих проектах.
Как это сделать в Visual Studio 2015?
Вы можете использовать абсолютный путь для каждого проекта, как это (я предполагаю, что файл appsettings.json
находится в корневом каталоге решения (например, global.json)):
var settingPath = Path.GetFullPath(Path.Combine(@"../../appsettings.json")); // get absolute path
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile(settingPath);
Установите абсолютный путь к общему файлу 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 также хорош.
Там может быть лучший способ сделать это, но вы можете добиться этого, добавив параметр precompile в файл project.json. Нечто похожее на:
"scripts": {
"precompile": [ "../copycommand.bat" ]
}
Где copycommand
указывает на командную команду, которая копирует ваш файл AppSettings.json в текущий каталог. Если вы настроите таргетинг на несколько платформ, вам, вероятно, потребуется настроить команду для каждой из платформ.
Другой вариант - использовать секреты пользователя и иметь приложения, имеющие один и тот же идентификатор приложения.
В качестве бонуса вы получаете строки подключения за пределами вашего приложения и уменьшаете вероятность их утечки из-за того, что они были введены в исходный код.