ASP.NET Core 1.0 ConfigurationBuilder()。AddJsonFile( "appsettings.json" );找不到文件



所以我终于开始看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();
}

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

您需要添加以下软件包:

    "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)
});

我从这篇博文中找到的另一种解决方案也有效。它的另一个好处是不需要修改启动.cs文件的启动方法签名。

在"构建选项"部分中,添加带有文件名的 copyToOutput。

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true,
    "copyToOutput": "appsettings.json"
  },
  .... The rest of the file goes here ....
实际上为此,

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

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

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

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

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

<ItemGroup>
    <Folder Include="wwwroot" />
    <None Include="appsettings.json" CopyToOutputDirectory="Always" />
</ItemGroup>

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

首先,将行.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();
}

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

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

最简单的是它是空白的。

最新更新