新的 .Net Core 2 站点无法识别 Configuration.GetConnectionString

Posted

技术标签:

【中文标题】新的 .Net Core 2 站点无法识别 Configuration.GetConnectionString【英文标题】:New .Net Core 2 Site does not reconize 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 应该开始练习他所教的内容...跟随非工作指南令人沮丧... 【参考方案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是什么?你的答案不清楚。也不清楚您的建议如何至少与所有其他答案一样可行。

以上是关于新的 .Net Core 2 站点无法识别 Configuration.GetConnectionString的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core 2 Web API JWT 令牌无法识别

控制器无法识别 JWT 角色.net core 5

.NET Core 控制台应用程序无法识别 Linux 上的输入参数

关于 IIS 上运行 ASP.NET Core 站点的“HTTP 错误 500.19”错误

.net core Docker Compose启动问题: Debugging Error, The program to be debug con not be found in the conta

我可以在 .NET 4.6/7 站点下运行 .NET Core 应用程序,反之亦然