错误背后是否有解释“名称空间'System.Web'中不存在类型或命名空间名称'脚本'”

时间:2012-04-26 21:14:02

标签: c# asp.net deployment iis-7

我在Visual Studio Express 2010中创建了一个“ASP.NET空网站”。

在App_Code的代码文件中,我有一行“使用System.Web.Script.Serialization;”

当我将文件推送到服务器时,出现以下错误:

  

异常消息:c:\ inetpub [....] \ Extensions.cs(10):错误CS0234:   名称空间中不存在类型或命名空间名称“脚本”   'System.Web'(您是否缺少程序集引用?)

(服务器运行的是带有安装了ASP.NET 4.0的IIS 7的Windows Server 2008。)

由于这是一个网站,而不是一个网络项目,我无法使用此处宣传的“发布”功能:The type or namespace name 'Script' does not exist in the namespace 'System.Web'

最后,经过一番挖掘,我发现这个命名空间包含在System.Web.Extension程序集中,我必须手动通过web.config包含它:

<compilation debug="true" targetFramework="4.0">
    <assemblies>
        <add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    </assemblies>
</compilation>

所以,我的问题:还有更好的方法吗?

由于我的本地项目不需要这样做,我怎样才能首先确定我需要手动引用哪些程序集,其次,如何获取进行引用所需的信息(即,如何获取PublicKeyToken)?

更新

因为这是一个Web站点而不是Web项目,所以我的引用列表在之后才显示,我手动将它们添加到Web.Config。

因此,选择“Copy Local”为“true”在此实例中不起作用。

4 个答案:

答案 0 :(得分:14)

您的提供商似乎没有GAC中的dll System.Web.Extensions

名称空间System.Web.ScriptsSystem.Web.Extensions.dll

的一部分

如果你这样做,你可以解决问题。

  1. 在项目参考
  2. 中选择System.Web.Extensions
  3. 转到属性标签,将Copy Local设置为true
  4. 这可以确保您也部署此dll。

    enter image description here

    enter image description here

答案 1 :(得分:1)

只需添加System.Web.Extensions作为项目的参考。您不必通过web.config手动执行此操作。将Copy Local设置为true以确保它包含在您的发行版中。

答案 2 :(得分:1)

您可以右键单击网站项目中的项目名称/位置,然后选择添加参考... 。从那里将显示一个对话框。选择.NET选项卡,然后选择System.Web.Extensions。这应该将它添加到项目中。您可以对需要添加的任何名称空间执行此操作。

答案 3 :(得分:0)

我的问题很相似,因为我正在做一个WPF应用程序。添加扩展引用并不足以让Intelisense检测到我需要使用什么来实例化JavaScriptSerializer。我后来发现我需要使用System.Web.Script.Serialization添加;然后它终于工作了:)