我在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”在此实例中不起作用。
答案 0 :(得分:14)
您的提供商似乎没有GAC中的dll System.Web.Extensions
。
名称空间System.Web.Scripts
是System.Web.Extensions.dll
。
如果你这样做,你可以解决问题。
System.Web.Extensions
Copy Local
设置为true
这可以确保您也部署此dll。
答案 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添加;然后它终于工作了:)