2012-08-15 15 views
19

He creado un sitio web varias veces utilizando el valor predeterminado "permitir que este sitio precompilado sea actualizable"; sin embargo, en la compilación más reciente, el sitio web estaba muy dañado. Después de jugar con los .dll (borrarlos y reemplazarlos, en el contenedor) noté que ciertas partes del sitio web comenzaban a funcionar nuevamente, pero si puse todo el .dll original en el sitio, se rompió.¿Cuál es la diferencia entre permitir que una página web de Visual Studio precompilada sea actualizable y no?

Estoy usando páginas aspx con varias extensiones web Ajax. Estos fueron agregados recientemente y pueden ser la fuente del problema. Desmarqué la opción "Permitir que este sitio precompilado sea actualizable" y agregó todo tipo de archivos de códigos compilados adicionales a la papelera, y todos los problemas con el sitio web desaparecieron ... ¿Qué está pasando aquí? ¿Cuál fue la diferencia?

No parece haber ninguna diferencia en la forma en que actualizo el sitio, solo una publicación directa de Visual Studio cada vez.

Cualquier apreciación sería apreciada.

Respuesta

16

Al desmarcar la opción "Permitir que este sitio precompilado sea actualizable" compila las páginas .Aspx, no solo los archivos de códigos (.VB/.CS). Dejarlo marcado le permite realizar ciertos cambios en los archivos .Aspx después de que se haya implementado sin volver a compilar (por ejemplo, mover la posición de un control o agregar un marcado HTML adicional).

Después de leer su descripción de los problemas de implementación, parece más probable que los errores se deben a que IIS necesita actualizar el Pool de aplicaciones. En un VPS de gama baja, a veces tiene sentido rebotar (reiniciar) si tiene ese lujo.

Lea los siguientes artículos de MSDN para obtener más información sobre la precompilación del sitio.

http://msdn.microsoft.com/en-us/library/399f057w(v=vs.80).aspx

http://msdn.microsoft.com/en-us/library/ms247286(v=vs.80).aspx

5

tengo una respuesta para mis propias preguntas, basadas en lo que dijeron NoAlias. He leído los dos enlaces y encontré lo siguiente:

precompilación para la implementación Sólo
Cuando precompile para el despliegue solamente, el compilador produce montajes de prácticamente todos los archivos fuente ASP.NET que normalmente se compilan en tiempo de ejecución Esto incluye código de programa en páginas, archivos .cs y archivos de clase .vb, otros archivos de código y archivos de recursos . El compilador elimina todas las fuentes y marcas de la salida . En el diseño resultante, se generan archivos compilados para cada de los archivos .aspx (con la extensión .compiled) que contienen los punteros en el ensamblaje apropiado para esa página. Para cambiar el sitio web , incluido el diseño de las páginas, debe cambiar los archivos originales , volver a compilar el sitio y volver a desplegar el diseño. La única excepción es es la configuración del sitio; Puede realizar cambios en el archivo Web.config en el servidor de producción sin tener que volver a compilar el sitio. Esta opción proporciona el mayor grado de protección para sus páginas y el mejor rendimiento al inicio.

precompilación para la implementación y actualizar
Cuando precompile para el despliegue y la actualización, el compilador produce asambleas de todo el código fuente (excepto el código de la página en páginas de un solo archivo) y de otros archivos que normalmente producen asambleas , como archivos de recursos. El compilador convierte los archivos .aspx en archivos individuales que utilizan el modelo compilado de código subyacente y los copia en el diseño . Esta opción le permite hacer cambios limitados a las páginas web ASP.NET en su sitio después de compilarlas. Para el ejemplo , puede cambiar la disposición de controles, colores, fuentes, y otros aspectos de apariencia de las páginas. También puede agregar controles, como , ya que no requieren controladores de eventos u otro código. Cuando el sitio se ejecuta por primera vez, ASP.NET realiza una compilación adicional en para crear un resultado desde el marcado. Nota

Un sitio actualizable precompilado no permite que varias páginas a hagan referencia a la misma clase CodeFile.

que habían hecho recientemente cambios en el sitio para incluir 2 páginas aspx que hace referencia el mismo CodeFile (el mismo código VB en el fondo) Cada página tiene propiedades ligeramente diferentes del HTML, pero necesitan tener CodeFiles idénticos, por lo que para mi segunda página ASP eliminé el archivo de código VB generado automáticamente y luego hice referencia a un CodeFile diferente en el HTML.

Como se indicó anteriormente, los sitios actualizables precompilados no permiten que varias páginas hagan referencia a la misma clase de archivo de código. Por eso algunas de mis páginas no funcionaban.

A partir de ahora, debo evitar utilizar la casilla de verificación predeterminada "Permitir que este sitio precompilado sea actualizable"; Debe permanecer sin marcar para que mi sitio web utilice los VB CodeFiles a los que se hace referencia en mis páginas múltiples.

Conclusión: Varias páginas aspx que hacen referencia al mismo CodeFile deben precompilarse para que se ejecuten correctamente. Esto significa que el sitio no podrá realizar ningún cambio sin redistribuirlo.

Cuestiones relacionadas