C# (新格式)visual studio项目中的可选appsettings.local.json
我的应用程序使用appsettings.json进行一些设置。如果存在appsettings.local.json,则应覆盖appsettings.json中包含的任何设置。到目前为止,没有问题 但我使用git进行版本控制。显然,我不希望其他用户破坏我的本地设置。所以我忽略了appsettings.json 此外,解决方案中还有很多项目。它们共享相同的设置。因此,在解决方案级别有一个appsettings.json,所有项目都将其作为链接包含 还好,除了一件事。为了可用,我必须将appsettings.local.json复制到输出目录。但它不应该在版本控制中。因此,如果有人复制了新的解决方案,他们就不会拥有它。那应该很好,但事实并非如此。VS表示“应该链接此文件,但它到底在哪里?”生成错误 我该怎么处理呢?计划:C# (新格式)visual studio项目中的可选appsettings.local.json,c#,git,visual-studio-2017,appsettings,local-files,C#,Git,Visual Studio 2017,Appsettings,Local Files,我的应用程序使用appsettings.json进行一些设置。如果存在appsettings.local.json,则应覆盖appsettings.json中包含的任何设置。到目前为止,没有问题 但我使用git进行版本控制。显然,我不希望其他用户破坏我的本地设置。所以我忽略了appsettings.json 此外,解决方案中还有很多项目。它们共享相同的设置。因此,在解决方案级别有一个appsettings.json,所有项目都将其作为链接包含 还好,除了一件事。为了可用,我必须将appsetti
appsettings.local.json
添加到.gitignore
李>
appsettings.local base.json
作为appsettings.local.json
复制到输出文件夹if
appsettings.local.json
不存在appsettings.local.json
(它将被VS复制到输出文件夹),则不执行任何操作Copy
target可以在生成之前/之后有条件地复制文件。以下目标是基于Visual Studio 2017和csproj的.NET核心项目的实际目标(文件名减少):
netcoreapp1.1
项目生成后,VS生成输出中应显示以下消息:
正在将src.json文件复制到:bin\Debug\netcoreapp1.1\dest.json
对于v2,这非常简单
appsettings.local.json
(它应该嵌套在主appsettings.json
文件下面)appsettings.local.json
添加到.gitignore
startup.cs
中,执行以下操作:
public class Startup
{
public IConfigurationRoot Configuration { get; }
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) //load base settings
.AddJsonFile("appsettings.local.json", optional: true, reloadOnChange: true) //load local settings
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) //load environment settings
.AddEnvironmentVariables();
Configuration = builder.Build();
}
/*
* rest of your startup.cs
*/
}
看起来这件事变化太快了,很难跟踪微软希望以“正确的方式”处理这些事情 在ASP.NETCore2中,我相信开发人员处理每个开发人员配置值的预期方法是使用
简短摘要:在Visual Studio 2019中,右键单击项目并选择“管理用户机密”。这将在
%APPDATA%\Microsoft\UserSecrets\…
中创建一个JSON文件,该文件由WebHost.CreateDefaultBuilders()
自动拾取(在默认ASP.NET核心项目中隐式调用)。对于.NET core>2.1,您可以简单地链接扩展方法ConfigureAppConfiguration(Action configureDelegate)
发送到您的网络主机。以下是一个例子:
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext,config)=>
{
config.AddJsonFile(
“appsettings.Local.json”,
可选:true,
重新加载更改:true);
})
// ...
当然,也可以忽略.gitignore中的appsettings.Local.json。为什么不只忽略
appsettings.Local.json呢?每个人都需要存在该文件。我只是不想改变。