MVC(2)视图可以引用GAC中的程序集吗?

本文关键字:GAC 程序集 引用 视图 MVC | 更新日期: 2023-09-27 18:08:06

我有一个MVC2视图,它使用在类库程序集中定义的类型的属性。

<div><%= Model.MyClass.MyProperty %></div>

如果我有我的类库程序集引用了Copy Local = false(所以它没有被复制到bin),当视图加载时说"MyProperty没有在MyClass类型上找到,我错过了一个引用吗?"使用程序集的Copy Local = true,视图将正确加载。

我正在部署这个MVC站点的服务器已经在GAC中拥有类库程序集。MVC站点找到它并在我请求这个视图之前在各种控制器操作中使用它,但是当视图试图直接内联使用它时,它就会出现上面的错误。我不想维护同一个程序集的两个副本。是否有任何方法可以使视图找到显然已经加载并正在使用的GAC程序集?

MVC(2)视图可以引用GAC中的程序集吗?

Views在web.config中有自己的using section。这个特定的web.config生活在视图文件夹的根,而不是应用程序根。下面是一个例子(可能有轻微的差异,因为这是一个MVC 5配置):

<system.web.webPages.razor>
  <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.1.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.Optimization"/>
      <add namespace="System.Web.Routing" />
      <add namespace="WebApplication1" />
    </namespaces>
  </pages>
</system.web.webPages.razor>

您很可能需要添加包含您在此文件中使用的类的名称空间。

更新1

您可能还需要在根web.config中注册程序集。

<compilation debug="true" targetframework="4.0" >
  <assemblies>
    <add assembly="Company.Web.Whatever, Version=1.2.3.4, Culture=neutral, PublicKeyToken=521aae76165ca3e4" />
  </assemblies>
</compilation>

您需要记住的是,这样的引用需要完全限定的汇编名称才能工作。