ConfigurationBuilderを使用したベースパスの設定


90

作成している.NetWebアプリのアプリケーションベースパスを設定しようとしています。ConfigurationBuilderでエラーが発生し続けます。これは私が得るエラーです。

DNX,Version=v4.5.1 error CS1061: 'ConfigurationBuilder' does not contain a definition for 'SetBasePath' and no extension method 'SetBasePath' accepting a first argument of type 'ConfigurationBuilder' could be found (are you missing a using directive or an assembly reference?)

私は私のために同じエラーが発生しますと仮定している.AddJsonFile().AddEnvironmentVariables()。私は何か間違ったことをしましたか?project.jsonに適切な依存関係を追加しませんでしたか?私はstartup.csとproject.jsonを同封しました。

project.json

{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"tooling": {
"defaultNamespace": "TripPlanner"
},

"dependencies": {
  "Microsoft.AspNet.StaticFiles":  "1.0.0-rc1-final",
  "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
  "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
  "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
  "Microsoft.Framework.Configuration": "1.0.0-beta8",
  "Microsoft.Framework.DependencyInjection": "1.0.0-beta8"
  //"Microsoft.Extensions.PlatformAbstractions": "1.0.0-beta8"
},

"commands": {
  "web": "Microsoft.AspNet.Server.Kestrel"
},

"frameworks": {
  "dnx451": { },
  "dnxcore50": { }
},

"exclude": [
  "wwwroot",
  "node_modules"
],
"publishExclude": [
  "**.user",
  "**.vspscc"
 ]
}

startup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.PlatformAbstractions;
using Microsoft.Framework.Configuration;
using Microsoft.Framework.DependencyInjection;
using TripPlanner.Services;



namespace TripPlanner
{
  public class Startup
  {
    public static IConfigurationRoot Configuration;

    public Startup(IApplicationEnvironment appEnv){
        var builder = new ConfigurationBuilder()
            .SetBasePath(appEnv.ApplicationBasePath)
            .AddJsonFile("config.json")
            .AddEnvironmentVariables();

        Configuration = builder.Build();
    }

    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(Microsoft.Extensions.DependencyInjection.IServiceCollection services)
    {
        services.AddMvc();
        #if DEBUG
        services.AddScoped<IMailService, DebugMailService> ();
        #else
        services.AddScoped<IMailService, RealMailService> ();
        #endif
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app)
    {
       //app.UseDefaultFiles();
       app.UseStaticFiles();
       app.UseMvc(config =>
       {
           config.MapRoute(
               name: "Default",
               template: "{controller}/{action}/{id?}",
               defaults: new { controller  = "App", action = "Index"}
           );
       });

    }

    // Entry point for the application.
    public static void Main(string[] args) => Microsoft.AspNet.Hosting.WebApplication.Run<Startup>(args);
  }
}

エラーは、public startupstartup.csの上部にある関数にあります。

回答:


176

私は問題を解決することができました。まだ解決していない場合は、project.jsonで次のことを試してください。以下を追加します。

"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-*",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final"

そしてそれはうまくいくはずです


project.jsonファイルがないので、EF Core 2.0でこれを行うにはどうすればよいですか?
ATHER 2017年

3
@ATHER:他のナゲットを追加するのと同じ方法で2つのナゲットを追加するだけです。
dejan 2017年

5
@ATHERdotnet add package <packageName>この場合のpackageNameはMicrosoft.Extensions.Configuration.FileExtensions、またはVisual Studioでnugetパッケージを追加します
William Ardila

51

誰かがまだこの問題に遭遇するかどうかはわかりませんが、私はdotnetcoreコンソールプロジェクト(netcoreapp2.0)でこれに対処することができました:

dotnet add package Microsoft.Extensions.Configuration.Json

1
@bishopに感謝します。それを.netコアライブラリに追加すると、問題が解決しました。
ウォーレスB.マクルーア2018年

はい、.JsonNuGetを介したインストールも機能します。
James Hirschorn

6

.csprojファイルに以下を追加してみてください。

<ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="2.2.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.2.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.2.0" />
</ItemGroup>

Microsoft.Extensions.Configuration.FileExtensionsとMicrosoft.Extensions.Configuration.Jsonは、まさに不足しているパッケージです。
OgnyanDimitrov19年

3

.NET Core1.xまたは.NETStandard 1.xを実行している場合は、次のコマンドを実行する必要があります。

dotnet add package Microsoft.Extensions.Configuration.Json -v 1.1.1

プロジェクトが別のフォルダー内にある場合:

dotnet add .\src\MyProject package Microsoft.Extensions.Configuration.Json -v 1.1.1

...ここで、MyProject.csprojファイルの名前です。


3

もう1つの考えられる問題を積み重ねるだけです...

私はこれを追加しなければなりませんでした:

<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0" />

これをコンパイルするために:

var builder = new ConfigurationBuilder()
  .SetBasePath(Directory.GetCurrentDirectory())
  ...

編集:私は数ヶ月前にこの回答を書きましたが、それはコンソールアプリ用だったと確信しています。


1
チャームのように働いた!
ダニエルコーエン

2

以下をproject.jsonに追加します。

"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-*"

2

project.jsonの依存関係に以下を追加してみてください。 "Microsoft.Extensions.Configuration.CommandLine": "1.1.1",

またはproject.csprojで:
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="1.1.1" />

これは私のために働いた。


1

project.jsonの依存関係に以下を追加してみてください。

"Microsoft.Extensions.Configuration": "1.0.0-*",
"Microsoft.Extensions.Configuration.Abstractions": "1.0.0-*",

提案をありがとう!両方をproject.jsonに追加してから、「dnu復元」を実行しました。しかし、Startup.csで同じエラーが発生します。他のアイデアはありますか?ここで使用している正確な関数のドキュメントを見つけました。SetBasePath()
currymanswag 2016年

0

さらに、[プロパティ]ウィンドウからJsonファイルの[出力ディレクトリにコピー]プロパティを[常にコピー]に設定することを忘れないでください。


0

考慮すべき他の何か:

using Microsoft.Extensions.Configuration;

その「using」ステートメントがないと、Microsoft.Extensions.Configuration.FileExtensionsで拡張メソッドが見つかりません。

私たちも次のような理由で問題が発生しました。

using System.Configuration;

そして、「ConfigurationBuilder」との名前の衝突がありました。追加します

using Microsoft.Extensions.Configuration;

行...削除します

using System.Configuration;

行、次にSystem.Configurationの下のすべてを完全修飾します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.