Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET Core 1.0 ConfigurationBuilder();找不到文件_Asp.net_Asp.net Core_Asp.net Core 2.0 - Fatal编程技术网

ASP.NET Core 1.0 ConfigurationBuilder();找不到文件

ASP.NET Core 1.0 ConfigurationBuilder();找不到文件,asp.net,asp.net-core,asp.net-core-2.0,Asp.net,Asp.net Core,Asp.net Core 2.0,所以我终于抽出时间来看看核心,我在第一个跨栏时摔倒了。我正在学习Pluralsight ASP.NET核心基础课程,在尝试将appsettings.json文件添加到configuration builder时遇到了一个异常 public Startup() { var builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json"); Configuration = builder.Bu

所以我终于抽出时间来看看核心,我在第一个跨栏时摔倒了。我正在学习Pluralsight ASP.NET核心基础课程,在尝试将appsettings.json文件添加到configuration builder时遇到了一个异常

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

这似乎奏效了。然而,不确定这是正确的方法。有点像黑客。

我从中找到的另一种解决方案也很有效。它还有一个额外的好处,即不需要修改Startup.cs文件的启动方法签名

在buildOptions部分,使用文件名添加copyToOutput


您需要在下面添加软件包:

    "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();
    }    
}
配置
方法中:

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方法,则必须使用Microsoft.Extensions.Configuration.Json添加

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

Project->右键单击->属性->调试->概要文件
,然后查看工作目录中的条目


最简单的是它应该是空的。

建议在
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();
    }
}

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

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


右键单击appsettings.json->Properties,然后确保Copy to Output Directory设置为“Copy Always”

我可以使用.SetBasePath(Directory.GetCurrentDirectory())使其工作,如下所示:如果是黑客,当你设置一个新的空白ASP.NET核心Web应用程序时,这是微软自己做的一个黑客行为。这就是我所缺少的。谢谢如果您没有project.json;别担心。这是倾销,更详细的谢谢<代码>生成器.SetBasePath(Directory.GetCurrentDirectory())为我修复了它。
public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json");

    Configuration = builder.Build();
}
<ItemGroup>
    <Folder Include="wwwroot\" />
    <None Include="appsettings.json" CopyToOutputDirectory="Always" />
</ItemGroup>