命名空间 'System.Web' 中不存在类型或命名空间名称为 'Optimization' 的成员。

38

我正在部署一个新的网站作为我的主要网站,它运行得非常好。

除了一个遗留系统(c#.net)之外,所有位于根URL下的应用程序也能正常工作,这个系统被广泛使用,但不幸的是,我无法访问源代码。

当我运行这个遗留应用程序www.mysite.com/crm时,我会收到以下错误:

Server Error in '/crm' Application.

Compilation Error

Description: An error occurred during the compilation of a resource required to 
service this request. Please review the following specific error details and modify 
your source code appropriately. 

Compiler Error Message: CS0234: The type or namespace name 'Optimization' does not 
exist in the namespace 'System.Web' (are you missing an assembly reference?)

Source Error:


Line 17:     <pages>
Line 18:       <namespaces>
Line 19:         <add namespace="System.Web.Optimization" />
Line 20:       </namespaces>
Line 21:     <controls>

Source File: e:\WebSites\newsite\Web.config    Line: 19 


Show Detailed Compiler Output:

Show Complete Compilation Source:


Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.18446

错误是在主站点运行应用程序时,列出了web.config文件。但是,这仅在我在主站点下运行应用程序时发生。

这是在Server 2008 R2和IIS7上运行的。

我该如何纠正这个问题?还能尝试什么?

更新

我不知道是否有所区别,但它在错误中引用的Web.Config是新网站的配置文件,而不是旧的应用程序的配置文件。我不确定为什么主站点的配置文件会成为一个因素。

澄清

我无法访问旧应用程序的源代码,因此无法调整该应用程序的属性。将优化dll粘贴到站点中也没有解决问题。它可能适用于其他用户,但对我来说却没有用。

解决方法

我在另一个URL下设置了新站点,并将流量重定向到根URL以让旧应用程序继续运行,直到我们可以替换它。这是一个非常笨拙的解决方案,但现在它能够运行。


这个问题应该可以帮助您解决问题:https://dev59.com/WWox5IYBdhLWcg3wCQAq - competent_tech
我看到了那篇帖子,但我无法修改子应用程序。在主站点上进行修改会有帮助吗? - davids
2
将所有缺失的dll上传至服务器的部署文件夹,即上传'System.Web.Optimization.dll'。 - Koti Panga
6个回答

60

我现在刚遇到了这个问题:

错误

我重新安装了优化框架,一切正常:

Install-Package Microsoft.AspNet.Web.Optimization

2
我喜欢这个解决方案,通常我都会使用它。但有时你可能会收到一个消息“项目中已存在' Microsoft.AspNet.Web.Optimization'包”,但问题仍未解决。在这种情况下,只需从“packages”文件夹中删除它,然后重新安装即可。 - Marin Popov
我曾经遇到过同样的问题。在我的项目中并不需要这个包,但每次尝试启动应用程序时都会出现这个错误。解决方案是:在 Views/Web.config 文件中查找此导入并将其删除(如果需要)。 - Timofey Orischenko

39
我在创建MVC5中的新区域后遇到了相同的问题。会自动生成一个名为web.config的文件。请检查Views文件夹下的web.config文件,看看其中是否有一行代码。
<add namespace="System.Web.Optimization" />
  1. if you need this then install it using following command.

    Install-Package Microsoft.AspNet.Web.Optimization
    

    at Package Manager Console like below

    pmc

  2. If you think no need then simply remove <add namespace="System.Web.Optimization" /> line from following section in web.config file

    <namespaces>
       <add namespace="System.Web.Mvc" />
       <add namespace="System.Web.Mvc.Ajax" />
       <add namespace="System.Web.Mvc.Html" />
       <add namespace="System.Web.Routing" />
       <!--<add namespace="System.Web.Optimization" />-->
       <add namespace="AutoParts.Web" />        
    </namespaces>
    

9

检查Bin文件夹以获取传统应用程序。可能只需要将该DLL放入其中。自ASP.NET 4.5以来,System.Web.Optimization命名空间存在,因此可能不被支持。传统应用程序可能比这更旧。


这个遗留应用程序比那个早得多。 - davids

5
在Visual Studio中,打开你的项目并查看引用树。
右键单击System.Web.Optimization并选择“属性”。
查找路径,如果为空,则在电脑上查找名为System.Web.Optimization.dll的文件,并将其复制到项目的“bin”文件夹中,问题就会得到解决。

2
它对我有效,实际上当我打开引用树时,这些问题库会自动加载。谢谢! - Vincent Wen
打开引用窗口并关闭后,引用会自动更新。将文件复制到 bin 文件夹后也是如此。 - Joshua K

1
我刚刚遇到了这样的问题:"CS0234 C# The type or namespace name 'Optimization' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)",然后我找到了这个stackoverflow页面。 -- 对于我来说,原因是我重命名了我正在使用的Web表单(aspx页),我还想重命名该表单背后的公共部分类。这样做导致了上述错误代码。我在代码后面(C#)添加了"using System.Web.Optimization;","清理"了解决方案,然后"生成"了解决方案,接着"重建"了解决方案,现在该错误已经消失了,而且该using语句也没有被使用,所以我把它删除了。我的解决方案不再有任何错误,所以我想分享这个奇怪的故事。我可能不需要使用那个"using"语句,但无论如何。

-4

主函数到区域

@Html.ActionLink("My Area Home", "Index", "Home", new { area = "MyArea" }, null)

区域到主要

@Html.ActionLink("Home", "Index", "Home", new { area = "" }, null)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接