2010-10-14 21 views
5

Acabo de encontrar un problema bastante extraño con VS2010 y el script #, que la mayoría de las veces puedo recrear.Problemas con el script # y el compilador

En mi simple situación, tengo 2 proyectos en mi solución; una aplicación web Asp.Net MVC2 estándar y una biblioteca de clases jQuery Script #. Creé una clase estática (atribuida con [Importado]) con un método estático, con la intención de que pueda asignar esta clase en código a una biblioteca JavaScript externa, como se describe en la documentación.

Sin embargo, parece que cada vez que adornar una clase con [IgnoreNamespace] para lograr este objetivo, el proyecto deja de compilar correctamente pero no me da ningún comentario sobre por qué está fallando (no hay errores en la ventana de error, por ejemplo). Tampoco es fácil deshacerse de él, ya que Visual Studio parece entrar en un estado permanente de falla de compilación; quitar las clases y los archivos del proyecto no lo resuelve, ni reiniciar Visual Studio. La única forma en que puedo conseguir que VS construya el proyecto con éxito es eliminar el proyecto por completo, crear uno nuevo y luego volver a agregar los archivos, lo que es molesto por decir lo menos.

Con un ajuste de resultados de generación detallado, me sale el siguiente:

destino "AfterCompile" en el archivo "C: \ Archivos de programa (x86) \ ScriptSharp \ v1.0 \ ScriptSharp.targets" de proyecto "e : \ project \ local \ ScriptSharpDemo \ Scripts \ Scripts.csproj "(destino" Compilar "depende de él): Tarea" ScriptCompilerTask " Ejecutando la tarea" ScriptCompilerTask "- FAILED. Terminado el objetivo de construcción "AfterCompile" en el proyecto "Scripts.csproj" - FAILED.

.. que no me dice mucho.

Hubo un par de ocasiones en las que he logrado crear este tipo de clase y luego construir correctamente, pero sobre todo puedo reproducir este problema de manera bastante confiable.

En este punto, me inclino a pensar que el error está en Script #, pero me gustaría tenerlo confirmado, y encontrar una posible solución si hay alguno.

+0

Debería recortar la clase que está intentando importar y publicarla aquí. –

+0

Además, ¿está utilizando la última versión del compilador? Prueba 0.6.1.0 si aún no lo has hecho. –

+1

Gracias por la respuesta. Me he dado cuenta de que este problema ocurre solo si elige el elemento 'Agregar clase ...' cuando intenta insertar una nueva clase en el proyecto Script #, en lugar de elegir 'Agregar elemento ...' y luego elegir una clase de Script # desde allí. Tan pronto como agregue una clase utilizando el primer método, el proyecto queda inutilizable. Y tiene sentido; Obviamente tengo que agregar un artículo al proyecto usando el método correcto. Aunque el archivo resultante se ve exactamente igual, S # obviamente conoce la diferencia y no le gusta. Desafortunadamente es un error fácil de hacer cuando estás en la zona :( –

Respuesta

5

Por si acaso alguien está teniendo un problema similar, he encontrado la causa del problema.

Al agregar una clase con este método o al copiar en un archivo de otro proyecto para su uso dentro de Script #, esto hace que se agregue una referencia a System.dll al proyecto. Esto (comprensiblemente) hace que el proyecto deje de compilar sin error.

Sería bueno tener una advertencia acerca de esto o de escritura # detectar alguna manera cuando se produce esta situación y/o crear una nueva plantilla para cuando uso 'Agregar clase' o importar un archivo, pero es sólo una cuestión de conveniencia y al menos ahora puedo hacer que mi proyecto vuelva a compilar sin problemas simplemente eliminando esta referencia.

+0

Debe marcar esto como la respuesta –

1

Al tratar de hacer mi proyecto de construcción de nuevo, me encontré con el siguiente, las posibles soluciones:

  • El "Inicio \ HomePage.cs" y "Shared \ Utility.cs" no debe ser borrada y permanecen donde se crearon inicialmente
  • "Home \ HomePage.cs" y "Shared \ Utility.cs" deben ser las últimas entradas en el archivo "* .csproj". Después de ellos, no debe seguir la etiqueta "Compilar"
  • Llamadas problemáticas a "Secuencia de comandos".Literal" podría causar silenciosa falla - sobre todo tener cuidado al tener parámetros (como Script.Literal("{0}.doFoo()", variable))
  • Lo mismo parece ser cierto para 'String.Format' cuando los parámetros de formato no son válidos
  • espacios de nombres y carpetas parecen causar muchos problemas, poner todas las clases en el mismo espacio de nombres y todas las clases en la misma carpeta pueden ayudar
0

Probé todas las sugerencias que se han dado aquí, pero seguí viendo el problema. Finalmente, determiné que la causa en mi La situación era que había agregado un atributo [IntrinsicProperty] a una de mis propiedades. Eliminarlo resolvió el problema. No me pregunte por qué esto causaba un problema, pero pensé Compartiría esta solución en caso de que otros se toparan con ella.

Cuestiones relacionadas