我正在设置一个appsettings.json文件,以便在任何.net Core项目(Web,控制台和库)之间共享。 我按照本文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);
}
这是我的项目结构
在我的项目网站中,读取文件的代码是,我需要在另一个项目中读取共享的.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();
答案 0 :(得分:0)
没有您的ConfigurationBuilder
实现以及如何将IConfiguration
传递给依赖项。例如,它们是独立的应用程序吗?
对于其他应用程序,您可以通过执行以下操作来获得所需的结果:
当您在Visual Studio中时,应用程序应无任何问题地读取appsettings.json。对于我的解决方案,我创建了一个名为Configuration的目录,其中包含两个子目录Development和Production。现在,当Visual Studio生成时,它应该遵循上述配置,但是要创建一个单独的Build目录,该目录不属于bin,我使用了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
,它将为我创建一个有效的Build目录。您可以忽略其他一些组件,因为它们是用于计划任务,安装脚本等的,因此我们还包括这些组件,因此当我们使用部署脚本时,所有组件都会转移到远程服务器。
一旦您提供有关其他项目如何链接到Web解决方案的更多信息,我将修改答案。