web-dev-qa-db-ja.com

ASP.NET Core 1.0 ConfigurationBuilder()。AddJsonFile( "appsettings.json");ファイルが見つかりません

だから私はついにコアを見て回って、最初のハードルに落ちました。 Pluralsight ASP.NET Core Fundamentalsコースをフォローしていますが、appbuilders.jsonファイルを構成ビルダーに追加しようとすると例外が発生します。

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

    Configuration = builder.Build();
}

私が取得しているエラーは、構成ファイル「appsettings.json」が見つかりませんでした。オプションではありません。ただし、コースビデオのように、ソリューションの直下に作成しました。

助言がありますか?

乾杯、

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

    Configuration = builder.Build();
}

これでうまくいくようです。ただし、これが適切な方法であるかどうかは不明です。ちょっとハックのように感じます。

22
Zhorian

以下のパッケージを追加する必要があります。

    "Microsoft.Extensions.Configuration.Json": "1.0.0"
21
user6655970

別の方法:

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)
});
14
Foo

これから私が見つけた代替ソリューション ブログ投稿 も機能します。 Startup.csファイルのStartupメソッドシグネチャを変更する必要がないという利点もあります。

BuildOptionsセクションで、ファイルの名前でcopyToOutputを追加します。

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true,
    "copyToOutput": "appsettings.json"
  },
  .... The rest of the file goes here ....
9
Dzejms

実際には、環境変数からルートパスを提供する必要があるため、ルートパスを提供するためにIHostingEnvironment参照を渡す必要があります。

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

addJsonFileメソッドが見つからない場合は、using Microsoft.Extensions.Configuration.Json;を追加する必要があります

7
bhatt ravii

Appsettings.json->プロパティを右クリックして、出力ディレクトリにコピーが「常にコピー」に設定されていることを確認します

3
user3413723

.NET Core 2.0では、.csprojファイルを更新してJSONファイルを出力ディレクトリにコピーし、次のようにアクセスできるようにします。

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

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

Then以下が機能します:

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

    Configuration = builder.Build();
}
_
1
Groppe

Microsoft.ExtensionsからConfiguration.Jsonパッケージをインストールするか、単にMicrosoft.Extensions.Configuration.Jsonをyに追加する必要があります。

プロジェクトデバッグプロパティで何かを行った場合、開始ディレクトリを誤って上書きした可能性があります。

Project -> Right-click -> Properties -> Debug -> Profileを選択し、Working Directoryのエントリを確認します。

最も単純なのは、空白であることです。

0
Chris F Carroll