Depurar aplicaciones ClickOnce que utilizan System.Deployment.Application
En Visual Studio, la implementación de ClickOnce permite configurar cómo se actualiza una aplicación.Sin embargo, si necesita utilizar y personalizar características avanzadas de implementación de ClickOnce, deberá tener acceso al modelo de objetos de implementación proporcionado por System.Deployment.Application.Puede utilizar las API de System.Deployment.Application para tareas avanzadas como:
Crear una opción "Actualizar ahora" en su aplicación
Descargas condicionales a petición de diversos componentes de aplicación
Actualizaciones directamente integradas en la aplicación
Garantía de que la aplicación cliente siempre está actualizada
Dado que las API de System.Deployment.Application sólo funcionan cuando una aplicación se implementa con tecnología ClickOnce, la única forma de depurarlas es implementar la aplicación con ClickOnce, asociarlas con ella y, a continuación, depurar.Puede ser difícil asociar el depurador lo bastante pronto, ya que este código se ejecuta con frecuencia al iniciarse la aplicación y antes de poder asociar el depurador.Una solución es colocar interrupciones (o detenciones, para los proyectos de Visual Basic) antes de que actualice el código de comprobación o a petición.
La técnica de depuración recomendada es la siguiente:
Antes de empezar, asegúrese de que están almacenados los archivos de símbolos (.pdb) y de código fuente.
Implemente la versión 1 de la aplicación.
Cree una nueva solución en blanco.En el menú Archivo, haga clic en Nuevo y, a continuación, en Proyecto.En el cuadro de diálogo Nuevo proyecto, abra el nodo Otros tipos de proyectos y, a continuación, seleccione la carpeta Soluciones de Visual Studio.En el panel Plantillas, seleccione Solución en blanco.
Agregue la ubicación de origen almacenada a las propiedades de esta nueva solución.En el Explorador de soluciones, haga clic con el botón secundario en el nodo de la solución y, a continuación, haga clic en Propiedades.En el cuadro de diálogo Páginas de propiedades, seleccione Depurar archivos de código fuente y, a continuación, agregue el directorio del código fuente archivado.De lo contrario, el depurador encontrará los archivos de código fuente obsoletos, ya que las rutas de acceso del archivo de código fuente están registradas en el archivo .pdb.Si el depurador utiliza archivos de código fuente obsoletos, verá un mensaje que le indica que el origen no coincide.
Asegúrese de que el depurador puede encontrar los archivos .pdb.Si los ha implementado con su aplicación, el depurador los encuentra automáticamente.Siempre busca primero junto al ensamblado en cuestión.De lo contrario, deberá agregar la ruta de acceso al archivo en Ubicaciones del archivo de símbolos (.pdb) (para tener acceso a esta opción, en el menú Herramientas, haga clic en Opciones, abra el nodo Depuración y haga clic en Símbolos).
Depure lo que sucede entre las llamadas a los métodos CheckForUpdate y Download/Update.
Por ejemplo, el código de actualización podría ser como sigue:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If My.Application.Deployment.IsNetworkDeployed Then If (My.Application.Deployment.CheckForUpdate()) Then My.Application.Deployment.Update() Application.Restart() End If End If End Sub
Implemente la versión 2.
Intente adjuntar el depurador a la aplicación de la versión 1 mientras descarga una actualización para la versión 2.Asimismo, puede usar el método System.Diagnostics.Debugger.Break o simplemente Stop en Visual Basic.Evidentemente, no debe dejar estas llamadas al método en el código de producción.
Por ejemplo, supongamos que está desarrollando una aplicación de Windows Forms y tiene un controlador de eventos para este método con lógica de actualización.Para depurarlo, asocie antes de presionar el botón y establezca un punto de interrupción (asegúrese de abrir el archivo almacenado adecuado y de establecer el punto de interrupción en él).
Utilice la propiedad IsNetworkDeployed para invocar las API de System.Deployment.Application sólo cuando se implementa la aplicación; las API nunca deben invocarse durante la depuración en Visual Studio.