问题 如何在Visual Studio 2015中的一个解决方案中跨多个ASP.NET CORE项目共享appsettings.json等配置文件?


我在一个解决方案中有3个ASP.NET CORE项目,我想在一个配置文件中共享连接字符串信息,如appsettings.json这些项目。

我如何在Visual Studio 2015中执行此操作?


9700
2017-07-09 21:57


起源



答案:


你可以像这样使用每个项目的绝对路径(我假设 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


8
2017-07-10 05:00





设置共享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
2017-10-29 01:59





可能有更好的方法来执行此操作,但您可以通过向project.json文件添加预编译设置来实现此目的。类似于:

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

在哪里 copycommand 指向将AppSettings.json文件复制到当前目录的批处理命令。如果您的目标是多个平台,则可能需要为每个平台自定义命令。


2
2017-07-10 01:10





另一种选择是使用 用户机密 并让应用程序共享相同的应用程序ID。

作为奖励,您可以将连接字符串保留在应用程序之外,并减少它们泄漏的可能性,因为它们是在源代码管理中推送的。


2
2017-07-10 19:41