所以我终于到了看Core并且我已经陷入了第一道障碍。我正在关注Pluralsight ASP.NET Core Fundamentals课程,当我尝试将appsettings.json文件添加到配置构建器时,我遇到了异常。
public Startup()
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
我得到的错误是找不到配置文件'appsettings.json'而且不是可选的。但是我在课程视频中直接创建了我的解决方案。
有什么建议吗?
干杯,
答案 0 :(得分:21)
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
这似乎可以解决问题。但不确定这是正确的方法。有点像一个黑客。
答案 1 :(得分:21)
您需要添加以下包:
"Microsoft.Extensions.Configuration.Json": "1.0.0"
答案 2 :(得分:14)
另一种方式:
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)
});
答案 3 :(得分:9)
我从这个blog post找到的替代解决方案也适用。它的另一个好处是不需要修改Startup.cs文件的启动方法签名。
在buildOptions部分中,使用文件名添加copyToOutput。
{
"version": "1.0.0-*",
"buildOptions": {
"emitEntryPoint": true,
"copyToOutput": "appsettings.json"
},
.... The rest of the file goes here ....
答案 4 :(得分:6)
实际上,您需要提供环境变量的提供根路径,因此您需要传递IHostingEnvironment
引用以提供根路径:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
如果找不到AddJsonFile方法,则必须添加using Microsoft.Extensions.Configuration.Json;
答案 5 :(得分:3)
在.NET Core 2.0中,您将更新.csproj文件以将JSON文件复制到输出目录,以便可以访问它,如下所示:
<ItemGroup>
<Folder Include="wwwroot\" />
<None Include="appsettings.json" CopyToOutputDirectory="Always" />
</ItemGroup>
答案 6 :(得分:3)
右键单击appsettings.json->属性,然后确保将“复制到输出目录”设置为“始终复制”
答案 7 :(得分:1)
建议在.SetBasePath(env.ContentRootPath)
中添加Startup.cs
的答案取决于之前的步骤。
首先,将行.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();
}
答案 8 :(得分:0)
如果您对Project Debug Properties做了任何事情,那么您可能无意中覆盖了起始目录:
Project -> Right-click -> Properties -> Debug -> Profile
然后查看Working Directory
中的条目。
最简单的是它是空白的。
答案 9 :(得分:0)
您需要安装Microsoft.Extensions的Configuration.Json软件包。 或仅将Microsoft.Extensions.Configuration.Json添加到y