2012-04-26 45 views
7

Hice un "Sitio Web vacío de ASP.NET" en Visual Studio Express 2010.¿Hay una explicación detrás del error "El tipo o nombre del espacio de nombres 'Script' no existe en el espacio de nombres 'System.Web'"

En un archivo de código en App_Code, tengo la línea "using System.Web.Script.Serialization;"

Cuando empujé los archivos en el servidor, tengo el siguiente error:

Exception message: c:\inetpub[....]\Extensions.cs(10): error CS0234: The type or namespace name 'Script' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)

(. El servidor ejecuta Windows Server 2008 con IIS 7 con ASP.NET 4.0 instalado)

Desde este es un sitio web, y no un proyecto web, no pude usar la función "publicar" como se promueve aquí: The type or namespace name 'Script' does not exist in the namespace 'System.Web'

Finalmente, después de algunas excavaciones, descubrí que este espacio de nombres está incluido en System.Web .Extension assembly, y que tuve que manualmente incluirla mediante el 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> 

Así, mi pregunta: hay una mejor manera de hacer esto?

Dado que nada de esto es necesario en mi proyecto local, ¿cómo puedo determinar primero qué ensamblajes necesitaré para hacer referencia manualmente, y segundo, cómo puedo obtener la información necesaria para hacer las referencias (es decir, cómo puedo obtener el PublicKeyToken)?

ACTUALIZACIÓN

Debido a que este es un sitio Web y no un proyecto Web, mi lista de referencias no se presenta hasta después los agrego a la Web.Config manualmente.

Por lo tanto, para seleccionar "Copiar local" a "verdadero" no funciona en esta instancia.

Respuesta

14

Parece que su proveedor no tiene el dll System.Web.Extensions en el GAC.

El espacio de nombres System.Web.Scripts es parte del System.Web.Extensions.dll.

Puede resolver su problema si lo hace.

  1. Seleccionar System.Web.Extensions en su proyecto hace referencia a
  2. Ir a la ficha de propiedades y establezca Copy Local a true

Esto asegura que implemente esta DLL también.

enter image description here

enter image description here

+0

Si estoy viendo el sitio web en VS Express, cuando hago clic para ver las referencias, la lista está vacía (a menos que las agregue manualmente al web.config primero), y por lo tanto No puedo configurar el "Copiar local" en "verdadero". Creo que esto funcionaría si fuera un proyecto web real y no solo un simple sitio web en VS. – dochoffiday

1

Sólo añadir System.Web.Extensions como una referencia a su proyecto. No tiene que hacerlo manualmente a través de web.config. Establezca Copiar local en verdadero para asegurarse de que esté incluido en su distribución.

1

puede hacer clic derecho en el nombre/ubicación del proyecto en su proyecto de sitio web y elegir Agregar referencia .... Desde allí se mostrará un diálogo. Elija la pestaña .NET y seleccione System.Web.Extensions. Esto debería agregarlo al proyecto. Puede hacer esto para cualquier espacio de nombres que necesite agregar.

0

Mi problema fue similar, porque estoy haciendo una aplicación WPF. Agregar la referencia de Extensiones no fue suficiente para que Intelisense detectara qué uso necesitaba para crear una instancia de JavaScriptSerializer. Más tarde descubrí que necesitaba agregar usando System.Web.Script.Serialization; y finalmente funcionó :)

Cuestiones relacionadas