C# 使用ConfigurationBuilder设置基本路径

C# 使用ConfigurationBuilder设置基本路径,c#,asp.net,json,asp.net-mvc,C#,Asp.net,Json,Asp.net Mvc,我正在尝试为正在构建的.Net web应用程序设置应用程序基路径。我在Configuration builder上不断遇到错误。这就是我得到的错误 DNX,Version=v4.5.1错误CS1061:“ConfigurationBuilder”不包含“SetBasePath”的定义,并且找不到接受“ConfigurationBuilder”类型的第一个参数的扩展方法“SetBasePath”(是否缺少using指令或程序集引用? 我假设我的.AddJsonFile()和.AddEnvironm

我正在尝试为正在构建的.Net web应用程序设置应用程序基路径。我在Configuration builder上不断遇到错误。这就是我得到的错误

DNX,Version=v4.5.1错误CS1061:“ConfigurationBuilder”不包含“SetBasePath”的定义,并且找不到接受“ConfigurationBuilder”类型的第一个参数的扩展方法“SetBasePath”(是否缺少using指令或程序集引用?

我假设我的
.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);
  }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
使用Microsoft.AspNet.Builder;
使用Microsoft.AspNet.Hosting;
使用Microsoft.AspNet.Http;
使用Microsoft.Extensions.DependencyInjection;
使用Microsoft.Extensions.PlatformAbstrations;
使用Microsoft.Framework.Configuration;
使用Microsoft.Framework.DependencyInjection;
使用TripPlanner.Services;
命名空间TripPlanner
{
公营创业
{
公共静态IConfigurationRoot配置;
公共启动(IApplicationEnvironment appEnv){
var builder=new ConfigurationBuilder()
.SetBasePath(appEnv.ApplicationBasePath)
.AddJsonFile(“config.json”)
.AddenEnvironmentVariables();
Configuration=builder.Build();
}
//此方法由运行时调用。请使用此方法将服务添加到容器中。
//有关如何配置应用程序的更多信息,请访问http://go.microsoft.com/fwlink/?LinkID=398940
public void配置服务(Microsoft.Extensions.DependencyInjection.IServiceCollection服务)
{
services.AddMvc();
#如果调试
services.AddScoped();
#否则
services.AddScoped();
#恩迪夫
}
//此方法由运行时调用。请使用此方法配置HTTP请求管道。
公共void配置(IApplicationBuilder应用程序)
{
//app.UseDefaultFiles();
app.UseStaticFiles();
app.UseMvc(配置=>
{
config.MapRoute(
名称:“默认”,
模板:“{controller}/{action}/{id?}”,
默认值:新建{controller=“App”,action=“Index”}
);
});
}
//应用程序的入口点。
publicstaticvoidmain(字符串[]args)=>Microsoft.AspNet.Hosting.WebApplication.Run(args);
}
}

错误出现在startup.cs顶部附近的
public startup
函数中

尝试将以下内容添加到project.json依赖项中:

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

将以下内容添加到project.json中:

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

我能够解决这个问题。如果尚未解决此问题,请尝试以下操作 在project.json中。添加以下内容:

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

它应该可以工作

尝试将以下内容添加到project.json依赖项中:
“Microsoft.Extensions.Configuration.CommandLine”:“1.1.1”,

或者在project.csproj中:


这对我很有用。

不确定是否还有人遇到这个问题,但我能够通过以下方式在dotnetcore控制台项目(netcoreapp2.0)中解决这个问题:


如果运行的是.NET Core 1.x.NET Standard 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
文件的名称。

尝试在
.csproj
文件中添加以下内容:



另外,不要忘记从属性窗口将Json文件的“复制到输出目录”属性设置为“始终复制”。

还有一些需要考虑的问题:

using Microsoft.Extensions.Configuration;

如果没有“using”语句,它在Microsoft.Extensions.Configuration.FileExtensions中找不到扩展方法

我遇到了麻烦,因为我们还:

using System.Configuration;
而且与“ConfigurationBuilder”的名称有冲突。 添加

using Microsoft.Extensions.Configuration;
行。。。移除

using System.Configuration;

行,然后完全限定System.Configuration下的任何内容

再接着说一个可能的问题

我必须补充一点:

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

编辑:几个月前我写了这个答案,但我很确定它是用于控制台应用程序的。

谢谢你的建议!我尝试将两者都添加到project.json中,然后执行了“dnu还原”。但我在Startup.cs中仍然遇到同样的错误。还有其他想法吗?我找到了我正在使用的确切函数的文档
SetBasePath()
既然现在没有project.json文件,在EF Core 2.0中怎么做?@ATHER:只需像添加任何其他NUGET一样添加这两个NUGET即可。@ATHER
dotnet add package
其中packageName在本例中是
Microsoft.Extensions.Configuration.FileExtensions
,或者在Visual Studio中添加nuget PackageHanks@bishop。在我的.net核心库中添加它解决了我的问题。是的,通过NuGet安装
.Json
也很有效。谢谢,meMicrosoft.Extensions.Configuration.FileExtensions和Microsoft.Extensions.Configuration.Json正是缺少的软件包。非常有效!
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0" />
var builder = new ConfigurationBuilder()
  .SetBasePath(Directory.GetCurrentDirectory())
  ...