新的 .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.cs
的ConfigureServices()
方法。我这样做了,但在我的项目中,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 令牌无法识别
.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