ASP.NET Core中当前上下文中不存在名称为'model'的变量。

9
我正在使用ASP.NET Core开发带插件的网站。我的主项目是asp.net web应用程序,可以正常工作。我有一个包含控制器的类库项目,也可以正常工作,但是在视图方面出了问题。当我打开*.cshtml文件时,我发现Razor不工作 - @using、@model和其他指令都无法识别,智能感知也不起作用。当我在model上悬停时,会给出标题中的错误信息:

在ASP.NET Core中当前上下文中不存在“model”名称

我使用EmbeddedFileProvider来查找视图,并将它们标记为嵌入资源。当我运行应用程序时,一切正常 - 视图正确渲染。我的唯一问题是Visual Studio中的错误提示。我搜索了一下,发现有类似的问题,但主要是针对ASP.NET MVC而不是Core,就像这里。我认为在类库配置中缺少某些内容,但我不确定是什么。

按照以下步骤操作:https://stackoverflow.com/a/33764916/6557649 对我有效。 - Heverson Ribeiro Resende
1个回答

12
新的csproj文件在顶层"Project"元素里有一个"Sdk"属性。当你创建一个新的Web应用程序时,它会被设置为"Web" SDK:

新的csproj文件在顶层"Project"元素里有一个"Sdk"属性。当你创建一个新的Web应用程序时,它会被设置为"Web" SDK:

<Project Sdk="Microsoft.NET.Sdk.Web">...</Project>

当您添加/创建类库时,默认为标准的非 Web SDK:

<Project Sdk="Microsoft.NET.Sdk">...</Project>
据我所知,Web SDK 导入其他任务以允许 Web 资源(例如 Razor 视图)的设计时处理。在您的插件库中将 SDK 更改为 Web。
“Web” 项目的另一个参数是默认输出一个 EXE 文件,因此还需将其添加到您的插件 csproj 中:
<PropertyGroup>
    <OutputType>Library</OutputType>
</PropertyGroup>

谢谢!正是我从旧的project.json升级到新的VS17类型时所缺少的东西。我的项目是Microsoft.Net.Sdk而不是sdk.web。 - Yablargo
6
我有同样的问题,在一个MVC网站项目中,使用了您所说的sdk指令,但是无论在哪个视图中,模型类型都无法被识别并且会被下划线标记为错误。请帮我翻译一下。 - Ricker Silva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接