2010-03-31 20 views
11

Quiero actualizar una biblioteca de clase (un solo archivo DLL) en una aplicación web de producción. Esta aplicación web está precompilada (publicada). Leí una respuesta en StackOverflow (lo siento, parece que ya no puedo encontrarla porque la función de búsqueda no funciona muy bien), eso me llevó a creer que podía simplemente pegar la nueva DLL en la carpeta bin y que sería seleccionada sin problemas (esto provocaría que el WP reciclara, lo cual está bien conmigo porque no usamos el estado de la sesión InProc).Actualización de una DLL en una carpeta de producción del sitio web ASP.NET de producción

Sin embargo, cuando probé esto, mi sitio explota y da una excepción FileLoadException que dice que la definición del manifiesto del ensamblado no coincide con la referencia del ensamblado. ¿Qué demonios es esto? Actualizar la DLL en Visual Studio y volver a implementar todo el sitio funciona bien, pero es un gran dolor en la parte posterior. ¿De qué sirve tener una DLL separada si tiene que volver a implementar todo el sitio para implementar los cambios?

Aquí está la pregunta: ¿Cómo puedo actualizar una DLL en un sitio web de producción sin romper la aplicación y sin volver a implementar todos los archivos?

+0

Este es un "sitio web" en Visual Studio, por cierto. No estoy seguro si eso hace la diferencia o no. –

Respuesta

9

Lo que hay que recordar es que hay sitios web y aplicaciones web tan lejos como Visual Studio y se considera ASPNET.

Los sitios web normalmente tienen todos los archivos aspx y vb publicados en el servidor activo y ASPNET Worker Process recompila la aplicación cada vez antes de la presentación.

En el otro extremo está la aplicación web, donde todos los códigos detrás de los archivos se compilan en un solo archivo DLL y simplemente despliega sus páginas aspx y la carpeta bin con el archivo DLL en producción.

También hay un "híbrido" conocido como "Precompiled Web Sites" (consulte el enlace para obtener información general de MSDN) donde no tiene el diseño único de DLL de una aplicación web, pero todo el trabajo de compilación del sitio web hecho para ti. Hay varios "modos" para esto dependiendo de sus necesidades.

Me parece que su error se debe a que su sitio está configurado como un sitio web con algún tipo de precompilación implementada. Usar el modelo precompilado es un poco más "estricto", ya que supone que ciertos archivos/firmas están en su lugar. Tener una versión actualizada del archivo DLL provoca un corte ya que la precompilación quiere un nombre y una versión del archivo.

Si es posible, su mejor opción sería convertir a una aplicación web, ya que puede agregar las DLL adicionales en producción sin ningún problema. De lo contrario, eche un vistazo a this matrix para ver qué tipo de precompilación necesita para su aplicación.

+0

+1 Gracias, esta es una buena respuesta. Todavía estoy algo confundido en el proceso de conversión de la aplicación web. ¿Qué está exactamente involucrado con "convertir a una aplicación web"? ¡Gracias de nuevo! –

+0

Debería poder hacer clic derecho en el archivo del proyecto y seleccionar "Convertir a aplicación web" y lo hará por usted. –

+0

No tengo la opción "Convertir a aplicación web" en el menú contextual de mi explorador de soluciones. Tengo la edición profesional VS2008. No estoy ciego, simplemente no está allí! ¿Hay algún tipo de complemento que necesito para esto? Gracias. –

1

Mira esta publicación SO, podría ser a lo que te refieres. The located assembly's manifest definition does not match the assembly reference

+0

Esa no es la indicada. Tenía una respuesta que decía algo en el sentido de "Sí, simplemente deje caer su nueva DLL en la carpeta bin y reciclará el grupo de aplicaciones y será recogido". Fue una respuesta aceptada y se votó varias veces. Dejé un comentario sobre la respuesta sobre FileLoadException. –

0

Eche un vistazo a su referencia. ¿Dice "versión específica = verdad"? Establézcalo en falso, vuelva a publicar su aplicación (debe hacerlo una vez, porque ahora su aplicación aún está buscando un ensamble con un manifiesto específico) y vuelva a intentarlo.

+0

¿Dónde puedo encontrar esta "versión específica"? –

+0

En las propiedades de referencia. Amplíe las referencias, haga clic derecho en la referencia específica, haga clic en Propiedades. –

+0

No puedo encontrar lo que estás hablando.Este es un sitio web, no una aplicación web. –

Cuestiones relacionadas