ASP.NET 核心 1.0 ConfigurationBuilder().AddJsonFile("appsettings.json");找不到文件
ASP.NET Core 1.0 ConfigurationBuilder().AddJsonFile("appsettings.json"); not finding file
所以我终于开始关注 Core,但我遇到了第一个障碍。我正在学习 Pluralsight ASP.NET 核心基础课程,但在尝试将 appsettings.json 文件添加到配置生成器时出现异常。
public Startup()
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
我收到的错误是配置文件 'appsettings.json' 未找到并且不是可选的。但是我已经直接在我的解决方案下创建了,就像在课程视频中一样。
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
这似乎可以解决问题。但是不确定这是正确的方法。有点像黑客。
我从这个 blog post 中找到的替代解决方案也适用。它具有不需要修改 Startup.cs 文件的启动方法签名的额外好处。
In the buildOptions section add copyToOutput with the name of the file.
{
"version": "1.0.0-*",
"buildOptions": {
"emitEntryPoint": true,
"copyToOutput": "appsettings.json"
},
.... The rest of the file goes here ....
您需要添加以下包:
"Microsoft.Extensions.Configuration.Json": "1.0.0"
另一种方式:
appsettings.json
:
{
"greeting": "A configurable hello, to you!"
}
Startup.cs
:
using Microsoft.Extensions.Configuration; // for using IConfiguration
using System.IO; // for using Directory
public class Startup
{
public IConfiguration Configuration { get; set; }
public Startup()
{
var builder = new ConfigurationBuilder();
builder.SetBasePath(Directory.GetCurrentDirectory());
builder.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
}
在Configure
方法中:
app.Run(async (context) =>
{
// Don't use:
// string greeting = Configuration["greeting"]; // null
string greeting = Configuration.GetSection("greeting").Value;
await context.Response.WriteAsync(greeting)
});
实际上,为此您需要从环境变量中提供根路径,因此您需要传递 IHostingEnvironment
引用以提供根路径:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
如果找不到 AddJsonFile 方法,则必须添加 using Microsoft.Extensions.Configuration.Json;
如果您对项目调试属性做了任何操作,那么您可能无意中覆盖了起始目录:
Project -> Right-click -> Properties -> Debug -> Profile
然后查看 Working Directory
中的条目。
最简单的就是空白
建议在 Startup.cs
中添加 .SetBasePath(env.ContentRootPath)
的答案取决于之前的步骤。
首先,将行 .UseContentRoot(Directory.GetCurrentDirectory())
添加到 Program.cs
中的 WebHostBuilder 构造中,如下所示:
public class Program
{
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddEnvironmentVariables()
.Build();
var host = new WebHostBuilder()
.UseConfiguration(config)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();
host.Run();
}
}
然后以下将起作用:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
在 .NET Core 2.0 中,您将更新 .csproj 文件以将 JSON 文件复制到输出目录以便可以访问它,如下所示:
<ItemGroup>
<Folder Include="wwwroot\" />
<None Include="appsettings.json" CopyToOutputDirectory="Always" />
</ItemGroup>
右键单击 appsettings.json -> 属性,然后确保将复制到输出目录设置为 "Copy Always"
所以我终于开始关注 Core,但我遇到了第一个障碍。我正在学习 Pluralsight ASP.NET 核心基础课程,但在尝试将 appsettings.json 文件添加到配置生成器时出现异常。
public Startup()
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
我收到的错误是配置文件 'appsettings.json' 未找到并且不是可选的。但是我已经直接在我的解决方案下创建了,就像在课程视频中一样。
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
这似乎可以解决问题。但是不确定这是正确的方法。有点像黑客。
我从这个 blog post 中找到的替代解决方案也适用。它具有不需要修改 Startup.cs 文件的启动方法签名的额外好处。
In the buildOptions section add copyToOutput with the name of the file.
{
"version": "1.0.0-*",
"buildOptions": {
"emitEntryPoint": true,
"copyToOutput": "appsettings.json"
},
.... The rest of the file goes here ....
您需要添加以下包:
"Microsoft.Extensions.Configuration.Json": "1.0.0"
另一种方式:
appsettings.json
:
{
"greeting": "A configurable hello, to you!"
}
Startup.cs
:
using Microsoft.Extensions.Configuration; // for using IConfiguration
using System.IO; // for using Directory
public class Startup
{
public IConfiguration Configuration { get; set; }
public Startup()
{
var builder = new ConfigurationBuilder();
builder.SetBasePath(Directory.GetCurrentDirectory());
builder.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
}
在Configure
方法中:
app.Run(async (context) =>
{
// Don't use:
// string greeting = Configuration["greeting"]; // null
string greeting = Configuration.GetSection("greeting").Value;
await context.Response.WriteAsync(greeting)
});
实际上,为此您需要从环境变量中提供根路径,因此您需要传递 IHostingEnvironment
引用以提供根路径:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
如果找不到 AddJsonFile 方法,则必须添加 using Microsoft.Extensions.Configuration.Json;
如果您对项目调试属性做了任何操作,那么您可能无意中覆盖了起始目录:
Project -> Right-click -> Properties -> Debug -> Profile
然后查看 Working Directory
中的条目。
最简单的就是空白
建议在 Startup.cs
中添加 .SetBasePath(env.ContentRootPath)
的答案取决于之前的步骤。
首先,将行 .UseContentRoot(Directory.GetCurrentDirectory())
添加到 Program.cs
中的 WebHostBuilder 构造中,如下所示:
public class Program
{
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddEnvironmentVariables()
.Build();
var host = new WebHostBuilder()
.UseConfiguration(config)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();
host.Run();
}
}
然后以下将起作用:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
在 .NET Core 2.0 中,您将更新 .csproj 文件以将 JSON 文件复制到输出目录以便可以访问它,如下所示:
<ItemGroup>
<Folder Include="wwwroot\" />
<None Include="appsettings.json" CopyToOutputDirectory="Always" />
</ItemGroup>
右键单击 appsettings.json -> 属性,然后确保将复制到输出目录设置为 "Copy Always"