Depurar aplicaciones ClickOnce que utilizan System.Deployment.Application

Actualización: noviembre 2007

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:

  1. Antes de empezar, asegúrese de que están almacenados los archivos de símbolos (.pdb) y de código fuente.

  2. Implemente la versión 1 de la aplicación.

  3. 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.

  4. 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.

  5. 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).

  6. 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
    
  7. Implemente la versión 2.

  8. Intente asociar el depurador a la aplicación de la versión 1 mientras descarga una actualización para la versión 2. También puede utilizar 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 WinForms y no tiene ningún controlador de eventos para este método con la lógica de actualización en él. 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.

Vea también

Tareas

Ejemplo ClickOnce OnDemand Deployment Technology

Referencia

System.Deployment.Application