7

我正在构建一个模块化的MVC4应用程序,其中每个模块(=区域)是一个类库。模型和控制器编译成.dll,视图被复制到适当的文件夹中。在运行时,一切正常。在设计时还有一个令人讨厌的问题:在类库中编辑剃须刀视图时,Visual Studio无法识别System.Web.Optimization命名空间。获取System.Web.Optimization在类库中的剃刀视图中工作

The name "Styles" does not exist in the current context. 
The name "Scripts" does not exist in the current context. 

我尝试添加的组件,以在根对System.Web /汇编部和内侧的web.config:

<add assembly="System.Web.Optimization, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 

我试图它没有特定的版本,太。这两种方法都没有解决问题,反而引发一个asp.net运行时错误(在Razor视图的第一行可见):

Could not load file or assembly 'System.Web.Optimization, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified. 

的组件项目中所引用和“复制本地”设置到'真'。它也作为剃须刀配置部分的命名空间添加。

我怀疑这是将来会遇到的其他程序集的一般问题。

编辑:我做了一般设置,以获得Intellisense在类库中的剃刀视图。一切工作到目前为止,除了VS2010无法识别优化命名空间。

回答

7

一个web.config文件添加到您的类库项目具有以下内容(包含剃刀意见之一)的根(从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, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
     <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
     <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 

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

    <system.web> 
    <compilation targetFramework="4.0"> 
     <assemblies> 
     <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
     </assemblies> 
    </compilation> 
    </system.web> 
</configuration> 

这将欺骗的Visual Studio去想什么它是一个Web项目并启用Intellisense。

+0

我已经做到了。智能感知工作正常,除了System.Web。优化命名空间。 – Marcel 2012-07-21 09:14:26

+1

您是否注意到我的示例中有<'?你有吗? – 2012-07-21 09:15:23

+0

是的,我有。我忘了在问题中提到,对不起! – Marcel 2012-07-21 09:19:09

7

我在asp mvc项目 的pre buded视图中出现了这个错误,因为我已经安装了Microsoft.Web.Optimization和nuget。

从Tools菜单中选择Library Package Manager,然后单击Package Manager Console。输入以下命令来更新捆绑和缩小:

Install-Package Microsoft.Web.Optimization -Pre 

这里有些additionals http://forums.asp.net/t/1812274.aspx/1

+0

我在哪里输入这个安装包? – guiomie 2013-09-06 15:01:30

+0

nuget包管理器 studio在工具菜单中有它 – 2013-09-16 14:56:53

1

@Vladimir,我使用Visual Studio 2013,并有你的线稍微更改为:

Install-软件包Microsoft.AspNet.Web.Optimization

这为我解决了它。

0

以下:

Install-Package Microsoft.AspNet.Web.Optimization 

工作正常,我。

0
Install-Package Microsoft.AspNet.Web.Optimization -version 1.1.0.0 

如果您的项目需要指定的版本,请添加-version ...以选择真正的版本。这对你有帮助。