【问题标题】:Setting Base Path using ConfigurationBuilder使用 ConfigurationBuilder 设置基本路径
【发布时间】:2016-06-30 07:50:52
【问题描述】:

我正在尝试为我正在构建的 .Net Web 应用程序设置应用程序基本路径。我不断收到配置生成器的错误。这是我得到的错误。

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。

项目.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);
  }
}

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

【问题讨论】:

    标签: c# asp.net json asp.net-mvc


    【解决方案1】:

    我能够解决这个问题。如果还没有解决,试试下面的 在 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:只需像添加任何其他 nuget 一样添加两个 nuget。
    • @ATHER dotnet add package &lt;packageName&gt; 其中 packageName 在这种情况下是 Microsoft.Extensions.Configuration.FileExtensions,或者在 Visual Studio 中添加 nuget 包
    【解决方案2】:

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

    dotnet add package Microsoft.Extensions.Configuration.Json
    

    【讨论】:

    • 谢谢@bishop。在我的 .net 核心库中添加它解决了我的问题。
    • 是的,通过 NuGet 安装 .Json 也可以。
    【解决方案3】:

    尝试在您的 .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 正是缺少的包。
    • 这个答案也适用于.Net 6
    【解决方案4】:

    只是继续解决另一个可能的问题...

    我必须添加这个:

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

    为了编译:

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

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

    【讨论】:

    • 工作就像一个魅力!
    【解决方案5】:

    如果您运行的是 .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 文件的名称。

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

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

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

        【讨论】:

        • 感谢您的建议!我尝试将两者都添加到 project.json 中,然后执行“dnu restore”。但是我的 Startup.cs 中仍然出现同样的错误。还有其他想法吗?我找到了我正在使用 here 的确切功能的文档。 SetBasePath()
        【解决方案8】:

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

        或者在 project.csproj 中:
        &lt;PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="1.1.1" /&gt;

        这对我有用。

        【讨论】:

          【解决方案9】:

          需要考虑的其他事项:

          using Microsoft.Extensions.Configuration;
          

          没有那个“使用”语句,它在 Microsoft.Extensions.Configuration.FileExtensions 中找不到扩展方法。

          我遇到了麻烦,因为我们也是:

          using System.Configuration;
          

          并且与“ConfigurationBuilder”发生了名称冲突。 添加

          using Microsoft.Extensions.Configuration;
          

          行...删除

          using System.Configuration;
          

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

          【讨论】:

            【解决方案10】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-03-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多