MVC3视图无法找到已添加的引用类

6

我的视图在查找位于参考文献之一中的类时出现问题。这个参考是指构建在项目外部的dll。

视图总是会出现错误:

找不到类型或命名空间名称“Company”(是否缺少using指令或程序集引用)

这是控制器。没有任何问题。

using Company.Entities;

public ActionResult Find()
{
    Person test = Person.SelectByADDistinguishedName("L*", false);
    return View(test);
}

这里是 View. 错误出现在 @Model 行。

@model Company.Entities.Person

@{
    ViewBag.Title = "Bob";
}

<h2>Find</h2>

我的Views/Web.config目前看起来像这样

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="Company.Entities" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

我查看了类似于这个的线程,但没有找到解决方法。

以下是屏幕上显示的消息:

Line 25:     using System.Web.Mvc.Html;
Line 26:     using System.Web.Routing;
Line 27:     using Company.Entities;
Line 28:     
Line 29:     


Source File: c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET

Files\root\49c9c7db\1f9dd5c8\App_Web_find.cshtml.a8d08dba.xro6gxci.0.cs Line: 27

如果我从web.config中删除任何有关程序集的提及(不包括@using语句),加载时会出现相同的错误消息,但针对此行。
public class _Page_Views_Home_Find_cshtml : System.Web.Mvc.WebViewPage<Company.Entities.Person> {

你尝试关闭视图并重新打开吗?或者在浏览视图时是否遇到了黄屏幕死机的情况? - Jimmy
错误仍然存在 - CS0246:找不到类型或命名空间名称“Dfait”(是否缺少使用指令或程序集引用?)。 - Lareau
在工单中添加了更多信息。 - Lareau
编译问题在视图中不存在--错误指向哪个代码部分? - Jimmy
当视图打开时,行@model Company.Entities.Person(Company下划线)和错误显示在错误列表中是我上面提到的那个(找不到“Company”类型或命名空间名称.. - Lareau
显示剩余2条评论
3个回答

7

经过一段时间的努力,我最终解决了它。

我不得不将该程序集添加到主web.config的assemblies部分中(而不是views下面的那个)

以下是web.config的示例。

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="Company, Version=2.0.31.0, Culture=neutral, PublicKeyToken=df9010405db60e6d"/>
  </assemblies>
</compilation>

感谢给我建议的人。

由于某些原因,即使这个也对我不起作用。这让我感到非常疯狂,因为这样一个基本的东西似乎是不可能的。 - Vincent Sels

4
请确保检查您的views目录是否有额外的web.config文件。我记得遇到过类似的问题,因为我没有更新正确的web.config文件。您的情况可能会有所不同。

嗨 Hal,感谢快速回复。我已经添加了我的views/web.config内容。我已经在views/web.config和/web.config中添加了命名空间,但没有成功。 - Lareau

2

添加引用

在使用控件之前,在.cshtml文件中工作。例如:

@model IEnumerable<MyApp.Models.MyModel>
@using System.Web.UI.WebControls;

但是你可以将它放在web.config中的namespaces标签下。这样它就对所有视图都是全局的。而且,不需要指定版本:

<namespaces>
        <add namespace="System.Web.UI.WebControls" />
</namespaces>

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