我有一个MVC2视图,它使用类库程序集中定义的类型的属性。
E.G。
<div><%= Model.MyClass.MyProperty %></div>
如果我使用Copy Local = false引用我的类库程序集(因此它没有被复制到bin),当视图加载说“在MyClass类型上找不到MyProperty时,我得到一个异常,我错过了一个引用?”。对于程序集的Copy Local = true,视图会正确加载。
我正在部署此MVC站点的服务器已经在GAC中具有类库程序集。 MVC站点在我请求此视图之前找到它并在各种控制器操作中使用它,但是当视图尝试直接内联使用它时,它会因上面的错误而爆炸。我不想要维护同一个程序集的两个副本。有没有办法让视图找到明显已加载并正在使用的GAC程序集?
答案 0 :(得分:2)
视图在using
中有自己的web.config
部分。此特定web.config
位于Views文件夹的根目录中,而不是应用程序根目录。这是一个例子(可能会有一些细微差别,因为这是一个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>
您很可能需要在此文件中添加包含您正在使用的类的命名空间。
您可能还需要在根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>
您需要记住的是,此类引用需要完全限定的程序集名称才能生效。