我正在构建一个模块化的MVC4应用程序,其中每个模块(= area)都是一个类库.模型和控制器编译成.dll,视图被复制到相应的文件夹中.在运行时,一切正常.在设计时,还有一个恼人的问题:在类库中编辑剃刀视图时,Visual Studio无法识别System.Web.Optimization命名空间.
The name "Styles" does not exist in the current context. The name "Scripts" does not exist in the current context.
我尝试将程序集添加到root和内部web.config中的system.web / compilation部分:
<add assembly="System.Web.Optimization,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" />
我没有特定的版本也尝试过它.这两种方法都没有解决问题,但是触发了asp.net运行时错误(在剃刀视图的第一行可见):
Could not load file or assembly 'System.Web.Optimization,PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
程序集在项目中引用,“Copy Local”设置为“True”.它还被添加为剃刀配置部分中的命名空间.
我怀疑这是我将来遇到的其他装配的一般问题.
编辑:我做了一般设置,让Intellisense进入类库中的剃刀视图.到目前为止,一切都有效,除了VS2010无法识别优化命名空间.
解决方法
将web.config文件添加到类库项目的根目录(包含Razor视图的项目),其中包含以下内容(取自
this blog post):
<configuration> <configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup,System.Web.WebPages.Razor,Version=2.0.0.0,PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection,PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection,PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections> <system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory,System.Web.Mvc,Version=4.0.0.0,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" /> </namespaces> </pages> </system.web.webPages.razor> <system.web> <compilation targetFramework="4.0"> <assemblies> <add assembly="System.Web.Mvc,PublicKeyToken=31bf3856ad364e35" /> </assemblies> </compilation> </system.web> </configuration>
这将欺骗Visual Studio认为它是一个Web项目并启用Intellisense.