无法获取模型的反射类型

10

步骤1:右键生成

这是我的第一步

步骤2:设置

输入图像描述

步骤3:错误消息

当我从控制器创建视图时,我的Vs2017弹出此错误消息

步骤4:我的模型

输入图像描述

如何解决?我无法生成创建表单。


1
可能是在VS 2017中使用.Net Core脚手架的已知问题:https://github.com/aspnet/Scaffolding/issues/430 - Phil.Wheeler
我有同样的问题,但是当我创建一个空白的新项目时,我可以进行脚手架。我不知道区别在哪里。 - Ben
请查看Phil.Wheeler链接。此问题已在预览2.0中修复。 - Neo Yap
@NeoYap,解决方案有进展了吗? - wandos
这是C#每个新版本都存在的一个持续问题。我在.Net 6.0中遇到了这个问题,将LangVersion从默认的10.0降级到7.1也没有任何区别。降级到7.1以下对我的代码来说改动太大,不值得。 - Auspex
显示剩余2条评论
10个回答

3
我曾多次遇到与脚手架有关的类似问题,而我通常的解决方案几乎每次都有效,包括当前这个问题。
  1. 右键解决方案文件
  2. 选择“重新生成解决方案”
然后再尝试你的操作。
在VS2017和VS2019中,这对我多次起了作用,包括最新的VS 2019。
看起来脚手架遇到了某些已经构建好的东西,原因未知。

3

到目前为止,即使您尝试为现有控制器和现有操作添加另一个视图,例如使用现有视图模型 AddPhoneNumberViewModelManageController.AddPhoneNumber 添加视图,仍然会抛出相同的异常,尽管已经存在相同操作和控制器的视图,并使用完全相同的视图模型。

无需上传更多截图或其他内容,问题似乎在 VS 2017 代码生成器(脚手架视图问题)中。希望这个问题在以下一些更新中得到解决。

因此,请耐心等待并使用复制/粘贴方法,无论如何都需要重新设计表单。显然,这不是您(我的)问题的解决方案,它只是说 -“您没有做错任何事,这是 VS 的错误,请等待更新”。


然而,对于VS2019 16.3.9,错误仍然存在,因此等待更新可能需要太长时间。 - oleksa
@oleksa 也许你应该联系微软的VS团队? - Alexander Christov

2
我也遇到了相同的问题,请确保控制器中没有问题,我有未完成的代码导致了错误,一旦我将其注释掉,就可以创建视图而没有任何问题。

1
我也遇到了这个问题,如果你已经创建或修改了用于脚手架的类,并且还没有完成构建,请先构建项目,然后再尝试。
.NET 无法为尚未构建的任何类进行脚手架。

是的。我也不得不这样做。谢谢 - Fandango68

1
我遇到了同样的问题,通过将项目文件中的C#版本从7.2降级到7.1来解决它。

enter image description here

出现了错误。 在这里输入图片描述

我记得我应用了一些VS代码提示,升级了C#版本。这个代码提示是在方法调用中添加参数名称,比如:

enter image description here

后来我尝试添加一个视图,结果出现了上述问题。经过数小时的搜寻和无果,我开始想起 C# 版本的更改。我降低了 C# 版本并删除了参数名称,然后成功地添加了视图。
顺便说一句,这个错误与模型没有任何关系,这是一个很大的误导。

我无法降级C#语言版本,因为在项目属性中被禁用了。所以我创建了一个没有模型的空视图,并按照文档添加了模型。 - oleksa
@oleksa 这个答案是基于 VS 2017 的早期版本。我相信这个问题在后来的 VS 2017 版本和 VS 2019 中已经得到了修复。请尝试更新你的 Visual Studio。 - Ibrahim Kais Ibrahim
好的,实际上我尝试过 VS2019 16.3.9,但没有运气。 - oleksa
@oleksa,你可以通过在.csproj中使用<LangVersion>属性进行降级,尽管这与主要问题无关。 - Default
@Default 这与主要问题非常相关。问题在于代码生成器使用了过时的C#版本。大多数关于此问题的描述是在VS使用7+和代码生成器6的情况下,但似乎在.Net 6.0中仍然存在问题,默认使用C# 10。因此,如果您的代码无法与代码生成器的版本编译,就会出现此错误,并且降级<LangVersion>可能是正确的解决方案。 - Auspex

1
我真的不知道发生了什么,回到旧版本的代码可以解决它。
我尝试过但没有奏效的方法:
- 重建 - 清理/删除 bin obj 文件夹 - 使用不同的模型 - 使用不同的模板 - 升级 Visual Studio - 确保没有编译错误
我知道不是问题的事情:
- 继承其他类的模型类
我怀疑是问题但还没有测试的事情:
- 具有相同参数的通用方法只有泛型约束不同
如果感兴趣,我可以提供代码和详细信息。

清理并重新构建对我有用。谢谢。 - Fandango68

1
我刚遇到了同样的错误,但以上的解决方案都对我无效。 结果发现安装了一个已弃用的 NuGet 包,它在某种程度上搞乱了脚手架。
所以对于那些遇到相同问题但没有任何有效解决方法的人来说,请检查你的项目中是否存在不必要和过时的包。 在我的情况下,这个包是 Microsoft.AspNetCore.Identity 版本 2.2.0。移除它后,错误得到修复,项目仍然正常运行。

0

可能已经很久以前贴过这个问题了,但是我使用的是VS2019(16.9.2)和/或命令行中的dotnet-aspnet-codegenerator时遇到了同样的问题。

经过数小时和数天的搜索,上述提到的解决方案都没有对我起作用,最终我找到了原因。

问题的原因是我首先实现了调用Web API以异步方式获取或发送数据的控制器。因此几乎所有方法都是异步的。

为了解决这个问题,我必须先生成控制器并保留默认实现。然后视图的生成才能成功完成。


0
对我来说,问题出在我的ASP.NET Core Web API的Program类没有被正确命名成Program。将其改回Program即可解决问题。

0

我曾经遇到和你一样的问题,但是我通过以下方法解决了这个问题:

  1. 构建项目(会看到构建失败)。
  2. 解决项目,直到成功构建项目。
  3. 然后再次添加/生成视图。(应该能够自动生成视图)

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