【问题标题】:New .Net Core 2 Site does not reconize Configuration.GetConnectionString新的 .Net Core 2 站点无法识别 Configuration.GetConnectionString
【发布时间】:2018-05-21 23:50:17
【问题描述】:

我正在从一个空的 ASP.NET Core 2 模板创建一个新网站,并遵循 Microsoft Entity Framework Tutorial 来帮助我进行设置。有一次它让你添加代码:

services.AddDbContext<SchoolContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

Startup.csConfigureServices() 方法。我这样做了,但在我的项目中,Visual Studio 在Configuraiton.GetConnectionString 中的Configuration 下给了我那条小红线

我原以为我缺少 using 语句甚至是包,但 Visual Studio 2017 快速操作没有识别要使用的 using 语句,我确实安装了 Microsoft.AspNetCore.All 包,所以我应该有所有的包。

我错过了什么导致 Configuration 无法识别?

编辑:错误是:

当前上下文中不存在名称“配置”

public void ConfigureServices(IServiceCollection services)
{
     services.AddDbContext<CollectionContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
     services.AddMvc();
}

【问题讨论】:

  • 确切的错误是什么?
  • 当前状态的问题尚不清楚,因为它不完整,需要太多问题才能阐明所问的内容。阅读How to Ask,然后提供minimal reproducible example,可用于重现您的问题,让我们更好地了解所要求的内容。
  • 试试 Microsoft.Extensions.Configuration nuget 包。
  • 根据更新,@gldraphael 的答案似乎适用于您的问题。 Configuration 不是静态的。它应该是Startup 类的实例变量/属性。
  • 应该是,但即使在 3.0.0 中也不见了!他们编写 - 编译以查看它是否有效,当然它不会编译,所以我猜他们只是说而不做......这些教程上的糟糕 QA/QC:请参阅我在答案下的评论。 Rick Anderson 应该开始练习他所教的内容...跟随非工作指南令人沮丧...

标签: c# asp.net-core entity-framework-core asp.net-core-2.0 asp.net-core-3.0


【解决方案1】:

您需要通过 DI 获取 IConfiguration 对象。
IConfiguration 参数添加到Startup 的构造函数,并将其分配给Configuration 属性:

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

public IConfiguration Configuration { get; }

我很惊讶你没有它,因为它是模板的一部分。

【讨论】:

  • 谢谢,我敢打赌这是普通 MVC 模板的一部分,但该模板添加了我不想要的其他内容,所以我使用了必须添加 servives.AddMVC() 我的空模板自我所以这是我需要添加的概率。我明天午休时间再做这个项目的时候测试一下。
  • 这行得通,我检查了正常的 MVC 项目模板,它是该模板的一部分,但它不是空模板的一部分。
  • 据我了解,即使 Web API 是通过 asp.net core 2 中的 MVC 交付的,Web API 项目中似乎也缺少。看起来using Microsoft.Extensions.Configuration; 是我想要的...
  • @Andrew 我感觉你做错了什么......你不应该需要将 IConfiguration 注入你的 DbContext ......随时打开一个新问题,有人会帮助你。
  • 本教程永远不会开箱即用。现在,对于 3.0.0 预览版(至少对于 VS for mac:docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/…),Startup.cs 缺少配置声明,例如类似private IConfiguration Configuration;(仅供参考:Startup.cs 的第 11 - 28 行:i.stack.imgur.com/cL8X8.png)...教程页面上的Add NuGet packages and EF tools 部分遵循它们在Add a database context class 部分中的使用...没有/差这些教程的 QA/QC...
【解决方案2】:

1#安装NuGet包:Microsoft.Extensions.Configuration
2#添加:使用Microsoft.Extensions.Configuration;
3#注意我在代码中添加了这一行:public IConfiguration Configuration { get; }

 public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseHttpsRedirection();
            app.UseRouting();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers(); 
            });
        }
    }

【讨论】:

    【解决方案3】:

    有时您会添加错误的命名空间,例如 AutoMapper.Configuration 来代替正确的 Microsoft.Extensions.Configuration。

    【讨论】:

      【解决方案4】:

      别忘了加public IConfiguration Configuration { get; }

      【讨论】:

        【解决方案5】:

        如果你使用的是 asp .net core mvc 5.0 那么在 program.cs 就这样写

        builder.Configuration.GetConnectionString("DefaultConnection")));
        

        【讨论】:

        • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
        • program.cs?那么builder是什么?你的答案不清楚。也不清楚您的建议如何至少与所有其他答案一样可行。
        猜你喜欢
        • 2018-07-18
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 2014-08-08
        • 2021-08-10
        • 2020-11-16
        • 2018-11-13
        相关资源
        最近更新 更多