题 尝试添加强类型视图时,在MVC项目中找不到任何类


我有一个非常奇怪的问题。每当我尝试使用ASP.NET MVC2中的“添加视图”对话框,然后通过从可用类的下拉列表中选择“查看数据类”来尝试“创建强类型视图”时,没有任何类(“模型” “)在我的MVC项目中出现了。

非常奇怪的部分是我的MVC项目引用的所有程序集,即使是解决方案中的其他项目,它们的类也会出现。我已经尝试过清理,重建,清理obj文件夹,但由于某种原因,每次都没有出现我的实际MVC程序集中的类。它之前工作正常,但现在它已经不复存在了,我无法想到任何已经发生变化的事情。

以前有人遇到这个问题吗? 谢谢您的帮助!

示例图片:

http://imgur.com/47itE.png


11
2017-09-22 21:29


起源


与此下拉列表完全相同的问题,通常只需重建文件即可修复,但现在无法正常工作。它从我引用的dll中获取了所有类,它只是没有拿起我的mvc web项目中的类,你是否设法找到某种修复方法? - spaceman


答案:


因为你还没有构建你的应用程序,首先构建你的应用程序,然后创建一个视图然后它将显示。


14
2018-01-18 06:24



这绝对是第一个尝试,因为VS使用编译代码的反射来发现可能的ViewModel类型。在我的问题中,我确实提到我尝试过清洁和重建,但仍然遇到了这个问题。 - John Culviner


想出这个,这是解决方案:

MVC项目引用了一组引用“CommonServiceContractAssembly.dll”的服务契约程序集。 MVC项目也引用了“CommonServiceContractAssembly.dll”。 MVC项目和服务合同程序集都构建为引用略有不同版本的“CommonServiceContractAssembly.dll”

当Visual Studio 2010反映所有引用的程序集“创建强类型视图”时,我相信它不确定如何处理被引用的稍微不同版本的“CommonServiceContractAssembly.dll”,因此它没有显示反映依赖于“CommonServiceContractAssembly.dll”的任何程序集的“强类型模型”可能性。

修复方法是在Visual Studio 2010启动时实际强制Visual Studio 2010的应用程序域使用正确版本的“CommonServiceContractAssembly.dll”。这是通过如下的Post Build事件完成的:

REM这是从模型生成T4以使其正常工作所必需的 复制“$(TargetDir)”CommonServiceContractAssembly.dll“”$(DevEnvDir)PublicAssemblies \“/ Y

因此,我将“CommonServiceContractAssembly.dll”复制到Visual Studio将加载它的位置。我这样做后一切正常。

另一种选择是始终确保共享共同依赖项的所有程序集始终使用该依赖项的相同版本进行编译。


2
2018-03-03 19:59



我遇到了你在这里描述的完全相同的问题。我已检查引用并更新所有内容以使用相同版本的所有依赖项,但问题仍然存在。你怎么弄清楚你的解决方案btw? - spaceman
嗯,我很遗憾听到这个解决方案不适合你。看一下反射器并验证上面的内容,你永远不会知道。我如何管理我的解决方案是考虑Visual Studio必须如何加载我的程序集以反映它们以确定“ViewModel Candidates”。根据以前的经验,我知道如果所有引用的版本都不匹配,那么.NET(以及VS在.NET上运行)可能会“沮丧”。我敢打赌VS2010会在内部抛出一个异常处理,只是决定在试图解决受影响的程序集时退出..让我们发布! - John Culviner
这个答案向我指出了正确的方向。我的项目正在引用例如 Assembly X 1.0.1 而其他参考之一正在使用 Assembly X 1.0.0。将该类库中的引用更新为较新版本就可以了。 - Marthijn
太棒了,我很高兴这可以帮到你!我想知道VS是否在某个地方注销了一个异常(我从来没能找到一个)。用户界面只是吃掉了更糟糕的问题。可能VS2012? - John Culviner


请确保将它们标记为“Public”,并在打开AddView对话框之前编译一次。


1
2018-05-17 07:00



是的,还有一个好点,先做其他事! - John Culviner
投票,请提供解释.... - Ajay Bhosale


项目中的某些类型会被该对话框过滤掉(例如,所有以“Controller”结尾的类型,或者所有类型的 System 要么 Microsoft 命名空间)。您的项目可能没有任何可以通过对话框过滤器的类型。


-1
2017-09-22 23:19



谢谢你的回复!这不是问题。我在MVC项目的models文件夹中说“Person.cs”。由于某些原因,Person.cs在下拉中根本没有出现,即使它之前已经完成(或类似性质的类)!很奇怪,我知道。这不会是什么大不了的事,但是我的公司很快就会使用这个工具的T4功能来创建我们自己的模板,所以我必须弄清楚为了让我们变得高效才会发生什么。 - John Culviner


添加视图之前只需构建解决方案,然后添加视图即可。 如果它不起作用那么你可以再次关注我,我会给你另一个解决方案


-1
2018-01-16 07:58



问题是我这样做了,但对于其他错误的人来说,这可能是一个可能的解决方案 - John Culviner