Depuración de aplicaciones ClickOnce que usan System.Deployment.Application
En Visual Studio, la implementación de ClickOnce le permite configurar cómo se actualiza una aplicación. Sin embargo, si necesita usar y personalizar las características avanzadas de implementación de ClickOnce, deberá acceder al modelo de objetos de implementación proporcionado por System.Deployment.Application. Puede usar las API de System.Deployment.Application para tareas avanzadas, como:
Creación de una opción "Actualizar ahora" en la aplicación
Descargas condicionales a petición de varios componentes de aplicación
Actualizaciones integradas directamente en la aplicación
Garantía de que la aplicación cliente siempre está actualizada
Dado que las API de System.Deployment.Application solo funcionan cuando se implementa una aplicación con la tecnología ClickOnce, la única manera de depurarlos es implementar la aplicación mediante ClickOnce, adjuntarla a ella y, después, depurarla. Puede ser difícil asociar el depurador lo suficientemente pronto, ya que este código se ejecuta a menudo cuando la aplicación se inicia y se ejecuta antes de poder adjuntar el depurador. Una solución consiste en colocar interrupciones (o paradas, para proyectos de Visual Basic) antes del código de comprobación de actualizaciones o el código a petición.
La técnica de depuración recomendada es la siguiente:
Nota
La clase ApplicationDeployment y las API del espacio de nombres System.Deployment.Application no se admiten en .NET Core y .NET 5 y versiones posteriores. En .NET 7 se admite un nuevo método de acceso a las propiedades de implementación de aplicaciones. Para obtener más información, consulte Acceso a las propiedades de implementación de ClickOnce en .NET. .NET 7 no admite el equivalente de los métodos ApplicationDeployment.
Antes de empezar, asegúrese de que se archivan los archivos de símbolos (.pdb) y los archivos de origen.
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 proyecto y seleccione la carpeta Soluciones de Visual Studio. En el panel Plantillas, seleccione Solución en blanco.
Agregue la ubicación de origen archivada a las propiedades de esta nueva solución. En el Explorador de soluciones, haga clic con el botón secundario en el nodo de soluciones y, después, haga clic en Propiedades. En el cuadro de diálogo Páginas de propiedades, seleccione Depurar archivos de origen y agregue el directorio del código fuente archivado. De lo contrario, el depurador encontrará los archivos de origen obsoletos, ya que las rutas del archivo de origen se registran en el archivo .pdb. Si el depurador usa archivos de origen 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 la aplicación, el depurador los encuentra automáticamente. Siempre busca junto al ensamblado en cuestión en primer lugar. De lo contrario, deberá agregar la ruta de acceso de archivo a las ubicaciones del archivo de símbolos (.pdb) ( para acceder 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 de método
CheckForUpdate
yDownload
/Update
.Por ejemplo, el código de actualización podría ser el siguiente:
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
Versión de implementació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. Como alternativa, puede usar el método
System.Diagnostics.Debugger.Break
o simplementeStop
en Visual Basic. Por supuesto, no debe dejar estas llamadas de método en 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 la lógica de actualización en él. Para depurar esto, basta con adjuntar antes de presionar el botón y, después, establecer un punto de interrupción (asegúrese de abrir el archivo archivado adecuado y establecer el punto de interrupción allí).
Use la propiedad IsNetworkDeployed para invocar las API System.Deployment.Application solo cuando se implemente la aplicación; las API no se deben invocar durante la depuración en Visual Studio.