31

所以我终于开始关注Core,我在第一关就掉了下来。我正在学习 Pluralsight ASP.NET Core Fundamentals 课程,并且在尝试将 appsettings.json 文件添加到配置生成器时遇到异常。

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

    Configuration = builder.Build();
}

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

4

9 回答 9

25
public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json");

    Configuration = builder.Build();
}

这似乎可以解决问题。但是不确定这是正确的方法。有点像黑客。

于 2016-07-09T14:16:37.343 回答
22

您需要添加以下包:

    "Microsoft.Extensions.Configuration.Json": "1.0.0"
于 2016-07-29T20:51:11.960 回答
16

另一种方式:

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)
});
于 2016-09-15T12:34:03.483 回答
9

我从这篇博文中找到的另一种解决方案也适用。它的额外好处是不需要修改 Startup.cs 文件的 Startup 方法签名。

在 buildOptions 部分添加带有文件名的 copyToOutput。

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true,
    "copyToOutput": "appsettings.json"
  },
  .... The rest of the file goes here ....
于 2016-07-25T15:55:00.053 回答
7

右键单击 appsettings.json -> 属性,然后确保将复制到输出目录设置为“始终复制”

于 2019-01-04T18:36:46.493 回答
7

实际上为此,您需要从环境变量中提供根路径,因此您需要传递IHostingEnvironment引用以提供根路径:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
                          .SetBasePath(env.ContentRootPath)
                          .AddJsonFile("appsettings.json");
    Configuration = builder.Build();
}

如果您找不到 AddJsonFile 方法,那么您必须添加using Microsoft.Extensions.Configuration.Json;

于 2016-10-24T12:38:23.210 回答
5

在 .NET Core 2.0 中,您将更新 .csproj 文件以将 JSON 文件复制到输出目录,以便可以访问它,如下所示:

<ItemGroup>
    <Folder Include="wwwroot\" />
    <None Include="appsettings.json" CopyToOutputDirectory="Always" />
</ItemGroup>
于 2018-03-25T23:13:51.880 回答
1

建议添加的答案.SetBasePath(env.ContentRootPath)取决于Startup.cs先前的步骤。

首先,将该行添加.UseContentRoot(Directory.GetCurrentDirectory())到您的 WebHostBuilder 构造中,Program.cs如下所示:

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();
}
于 2017-11-08T19:37:40.453 回答
0

如果您对项目调试属性进行了任何操作,那么您可能无意中覆盖了起始目录:

Project -> Right-click -> Properties -> Debug -> Profile然后查看 中的条目Working Directory

最简单的是它是空白的。

于 2017-09-15T16:47:00.140 回答