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程序集?
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>
您需要记住的是,这样的引用需要完全限定的汇编名称才能工作。