ASP.NET Core 1.0 ConfigurationBuilder()。AddJsonFile(“appsettings.json”);找不到档案

时间:2016-07-09 14:06:07

标签: asp.net asp.net-core asp.net-core-2.0

所以我终于到了看Core并且我已经陷入了第一道障碍。我正在关注Pluralsight ASP.NET Core Fundamentals课程,当我尝试将appsettings.json文件添加到配置构建器时,我遇到了异常。

public Startup()
{
    var builder = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json");

    Configuration = builder.Build();
}

我得到的错误是找不到配置文件'appsettings.json'而且不是可选的。但是我在课程视频中直接创建了我的解决方案。

有什么建议吗?

干杯,

10 个答案:

答案 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