【问题标题】:Attempting to add a strongly typed view does not find any classes in the MVC project尝试添加强类型视图在 MVC 项目中找不到任何类
【发布时间】:2010-09-22 21:29:40
【问题描述】:

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

非常奇怪的是我的 MVC 项目引用的所有程序集,甚至解决方案中的其他项目,它们的类都显示出来了。我尝试过清理、重建、清理 obj 文件夹,但由于某种原因,我的实际 MVC 程序集中的所有类都没有出现。以前可以正常工作,但现在不行了,我真的想不出有什么变化。

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

示例图片:

【问题讨论】:

  • 这个下拉菜单有完全相同的问题,通常只需重建文件即可解决,但现在无法正常工作。它从我引用的 dll 中提取所有类,只是没有提取我的 mvc web 项目中的类,您是否设法找到某种修复方法?

标签: asp.net-mvc asp.net-mvc-2


【解决方案1】:

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

【讨论】:

  • 这绝对是第一个尝试的事情,因为 VS 使用编译代码的反射来发现可能的 ViewModel 类型。我确实在我的问题中提到我尝试过清理和重建,但是仍然遇到了这个问题。
【解决方案2】:

想通了,这里是解决方案:

MVC 项目引用了一堆服务合同程序集,其中引用了“CommonServiceContractAssembly.dll”。 MVC 项目还引用了“CommonServiceContractAssembly.dll”。 MVC 项目和服务合同程序集都是参考稍微不同版本的“CommonServiceContractAssembly.dll”构建的

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

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

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

因此,我将“无处不在”引用的“CommonServiceContractAssembly.dll”复制到 Visual Studio 将加载它的位置。完成此操作后,一切正常。

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

【讨论】:

  • 我遇到了与您在此处描述的完全相同的问题。我检查了引用并更新了所有内容以对所有依赖项使用相同的版本,但问题仍然存在。顺便说一句,您是如何找到解决方案的?
  • 嗯,很遗憾听到该解决方案不适合您。看看反射器并验证上述内容,你永远不会知道。我管理我的解决方案的方式是考虑 Visual Studio 必须如何加载我的程序集以反映它们以确定“ViewModel Candidates”。根据以前的经验,我知道如果所有引用的版本都不匹配,.NET(以及 VS,因为它在 .NET 上运行)可能会“不安”。我敢打赌 VS2010 会在内部某个地方抛出一个异常,该异常会被处理,并决定退出尝试解决受影响的程序集。让我们保持最新状态!
  • 这个答案为我指明了正确的方向。例如,我的项目引用了Assembly X 1.0.1,而其他引用之一正在使用Assembly X 1.0.0。将该类库中的引用更新到较新的版本就可以了。
  • 太棒了,我很高兴这能帮上忙!我想知道 VS 是否在某个地方记录了一个异常(我一直找不到)。 UI 只是解决了更糟糕的问题。 VS2012 可能吗?
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 感谢您的回复!这不是问题。我在我的 MVC 项目的模型文件夹中说“Person.cs”。出于某种原因,Person.cs 根本没有出现在下拉列表中,即使它以前出现过(或类似性质的类)!我知道很奇怪。这没什么大不了的,但是我的公司很快就会使用这个工具的 T4 功能来创建我们自己的模板,所以我必须弄清楚发生了什么才能提高效率。
    【解决方案5】:

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

    【讨论】:

    • 问题说我这样做了,但对于那些错误地没有这样做的人来说,这可能是一个可能的解决方案
    猜你喜欢
    • 2016-03-12
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多