Compilación de aplicaciones ClickOnce desde la línea de comandos

En Visual Studio, puede compilar proyectos desde la línea de comandos, incluso si se crean en el entorno de desarrollo integrado (IDE). De hecho, puede recompilar un proyecto creado con Visual Studio en otro equipo que solo tenga .NET Framework instalado. Esta funcionalidad le permite reproducir una compilación mediante un proceso automatizado, por ejemplo, en un laboratorio de compilación central o mediante técnicas avanzadas de scripting más allá del ámbito de la creación del propio proyecto.

Nota:

Para compilar aplicaciones ClickOnce de .NET desde la línea de comandos, consulte Compilación de aplicaciones ClickOnce de .NET desde la línea de comandos.

Uso de MSBuild para reproducir implementaciones de aplicaciones ClickOnce de .NET Framework

Al invocar msbuild /target:publish en la línea de comandos, este comando indica al sistema MSBuild que compile el proyecto y cree una aplicación ClickOnce en la carpeta publish. Este comando equivale a seleccionar el comando Publicar en el IDE.

Este comando ejecuta msbuild.exe, que se encuentra en la ruta de acceso en el entorno del símbolo del sistema de Visual Studio.

Un "destino" (target) es un indicador para MSBuild sobre cómo procesar el comando. Los destinos clave son el destino de "compilación" (build) y el destino de "publicación" (publish). El destino de compilación es equivalente a seleccionar el comando Compilar (o presionar F5) en el IDE. Si solo desea compilar el proyecto, puede escribir msbuild. Este comando funciona porque el destino de compilación es el destino predeterminado para todos los proyectos generados por Visual Studio. Como resultado, no es necesario especificar explícitamente el destino de compilación. Por lo tanto, escribir msbuild es la misma operación que escribir msbuild /target:build.

El comando /target:publish indica a MSBuild que invoque el destino de publicación. El destino de publicación depende del destino de compilación, lo que significa que la operación de publicación es un superconjunto de la operación de compilación. Por ejemplo, si realizó un cambio en los archivos de código fuente de Visual Basic o C#, la operación de publicación vuelve a compilar automáticamente el ensamblado correspondiente.

Para información sobre cómo generar una implementación de ClickOnce completa mediante la herramienta de la línea de comandos Mage.exe para crear el manifiesto ClickOnce, consulte Tutorial: Implementación manual de una aplicación ClickOnce.

Creación y compilación de una aplicación ClickOnce básica con MSBuild

La manera más fácil de crear un perfil de publicación es mediante Visual Studio. Se requiere un perfil de publicación para publicar mediante MSBuild.

Crear y publicar un proyecto ClickOnce

  1. Abra Visual Studio y cree un nuevo proyecto.

    Elija la plantilla de proyecto Aplicación de Windows Forms (.NET Framework) o Aplicación de WPF (.NET Framework) y asigne al proyecto el nombre CmdLineDemo.

  2. En el menú Compilar, seleccione el comando Publicar.

    Este paso garantiza que el proyecto está configurado correctamente para generar una implementación de aplicación ClickOnce.

    Aparece el Asistente para publicación.

  3. En el Asistente para publicación, seleccione Finalizar.

    Visual Studio genera y muestra la página web predeterminada, denominada Publish.htm.

  4. Guarde el proyecto y anote la ubicación de la carpeta en la que se almacena.

    Los pasos anteriores crean un proyecto ClickOnce que se ha publicado por primera vez. Ahora puede reproducir la compilación fuera del IDE.

Reproducir la compilación desde la línea de comandos

  1. Salga de Visual Studio.

  2. En el menú Inicio de Windows, seleccione Herramientas>Línea de comandos>Símbolo del sistema para desarrolladores.

    Se abre el Símbolo del sistema para desarrolladores de Visual Studio.

  3. En Símbolo del sistema de Visual Studio, cambie el directorio actual a la ubicación del proyecto que acaba de compilar anteriormente.

    Si no está trabajando en el directorio del proyecto, escriba un comando para cambiar a la ubicación deseada, como chdir C:\Users\username\source\repos\CmdLineDemo.

  4. Para quitar los archivos existentes generados en la sección anterior, escriba rmdir /s publish.

    Este paso es opcional, pero garantiza que la compilación de la línea de comandos genere todos los archivos nuevos.

  5. Escriba msbuild /target:publish.

    Los pasos anteriores generan una implementación completa de la aplicación ClickOnce en una subcarpeta del proyecto denominado Publish. CmdLineDemo.application es el manifiesto de implementación ClickOnce. La carpeta CmdLineDemo_1.0.0.0 contiene los archivos CmdLineDemo.exe y CmdLineDemo.exe.manifest, el manifiesto de aplicación ClickOnce. Setup.exe es el programa previo, que está configurado de forma predeterminada para instalar .NET Framework. La carpeta DotNetFX contiene los archivos redistribuibles de .NET Framework. Los archivos de esta ubicación comprenden el conjunto completo de archivos que necesita para implementar la aplicación en la web o a través de UNC o CD/DVD.

Nota:

El sistema MSBuild usa la opción PublishDir para especificar la ubicación de la salida, por ejemplo msbuild /t:publish /p:PublishDir="<specific location>".

Salida del proceso de publicación

MSBuild usa la propiedad PublishDir para establecer la ubicación de salida de compilación, incluidos los artefactos de compilación. El valor de PublishDir que usa MSBuild como destino para la publicación se obtiene de forma predeterminada de la propiedad PublishDir en el archivo de proyecto (.NET Framework). Puede invalidar este comportamiento en la línea de comandos de MSBuild mediante el modificador /p. Si invalida la configuración, la salida de publicación va a la ubicación especificada. La salida se genera durante el paso de publicación de MSBuild. Cualquier destino de MSBuild con ejecuciones de AfterTargets="ClickOncePublish" después de realizar esta copia.

La propiedad PublishUrl, a diferencia de PublishDir, no se usa en el paso de MSBuild. PublishUrl se omite cuando se invoca MSBuild directamente para publicar desde la línea de comandos.

Cuando se inicia la publicación en el IDE de Visual Studio, Visual Studio invoca MSBuild para publicar artefactos en la ubicación PublishDir. Una vez completado este paso de MSBuild, Visual Studio publica los archivos específicos de ClickOnce en la ubicación la que apunta PublishUrl. Este segundo paso se ejecuta dentro del proceso de Visual Studio. No se puede insertar ningún destino o tarea para ejecutarse durante este paso porque es un proceso de Visual Studio.

En el caso de las implementaciones de MSBuild que no usan Visual Studio, copie todos los archivos del directorio de implementación en el destino de implementación o los medios. El directorio de implementación puede ser una carpeta de un sitio web o un sitio FTP, un recurso compartido de archivos o un CD-ROM. Por ejemplo, puede usar una herramienta de terceros o una tarea personalizada de MSBuild para copiar los archivos ClickOnce.

Para cualquier procesamiento posterior en la carpeta PublishUrl, debe tener un script independiente.

Importante

Si PublishDir se establece en la misma ubicación que PublishUrl, la salida de compilación duplicada se copia en la ubicación PublishUrl. Puede evitar esta incidencia en Visual Studio 2022, versión 17.4 y posteriores, mediante la creación de un nuevo perfil. El nuevo perfil establece PublishDir en una ubicación diferente a PublishUrl. Al final de la operación de publicación, los archivos ClickOnce pertinentes se copian de PublishDir a la ubicación PublishUrl.

Publicación de propiedades

Al publicar la aplicación mediante los procedimientos anteriores, el Asistente para publicación inserta las siguientes propiedades en el archivo del proyecto. Estas propiedades influyen directamente en cómo se genera la aplicación ClickOnce.

In CmdLineDemo.vbproj / CmdLineDemo.csproj:

<AssemblyOriginatorKeyFile>WindowsApplication3.snk</AssemblyOriginatorKeyFile>
<GenerateManifests>true</GenerateManifests>
<TargetZone>LocalIntranet</TargetZone>
<PublisherName>Microsoft</PublisherName>
<ProductName>CmdLineDemo</ProductName>
<PublishUrl>http://localhost/CmdLineDemo</PublishUrl>
<Install>true</Install>
<ApplicationVersion>1.0.0.*</ApplicationVersion>
<ApplicationRevision>1</ApplicationRevision>
<UpdateEnabled>true</UpdateEnabled>
<UpdateRequired>false</UpdateRequired>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdateUrlEnabled>false</UpdateUrlEnabled>
<IsWebBootstrapper>true</IsWebBootstrapper>
<BootstrapperEnabled>true</BootstrapperEnabled>

En el caso de los proyectos de .NET Framework, puede invalidar estas propiedades en la línea de comandos sin modificar el propio archivo del proyecto. Por ejemplo, el código siguiente compila la implementación de la aplicación ClickOnce sin el programa previo:

msbuild /target:publish /property:BootstrapperEnabled=false

Las propiedades de publicación se controlan en Visual Studio desde las páginas de propiedades Publicar, Seguridad y Firma del Diseñador de proyectos.

Las siguientes propiedades de publicación se establecen en varias páginas de propiedades del diseñador de aplicación.

  • AssemblyOriginatorKeyFile determina el archivo de clave usado para firmar los manifiestos de aplicación ClickOnce. Esta misma clave también se puede usar para asignar un nombre seguro a los ensamblados. Esta propiedad se establece en la página Firma del Diseñador de proyectos.

Las propiedades siguientes se establecen en la página Seguridad:

  • Habilitar configuración de seguridad de ClickOnce determina si se generan manifiestos ClickOnce. Cuando se crea inicialmente un proyecto, la generación de manifiestos ClickOnce está desactivada de forma predeterminada. El asistente activará automáticamente esta marca al publicar por primera vez.

  • TargetZone determina el nivel de confianza que se va a emitir en el manifiesto de aplicación ClickOnce. Los valores posibles son "Internet", "LocalIntranet" y "Custom". Internet y LocalIntranet hacen que se emita un conjunto de permisos predeterminado en el manifiesto de aplicación ClickOnce. LocalIntranet es el valor predeterminado y básicamente significa plena confianza. Custom especifica que solo se van a emitir los permisos especificados explícitamente en el archivo app.manifest base en el manifiesto de aplicación ClickOnce. El archivo app.manifest es un archivo de manifiesto parcial que contiene solo las definiciones de información de confianza. Se trata de un archivo oculto, que se agrega automáticamente al proyecto al configurar permisos en la página Seguridad.

Las propiedades siguientes se establecen en la página Publicar:

  • PublishUrl es la ubicación en la que se publica la aplicación en el IDE. Se inserta en el manifiesto de aplicación ClickOnce si no se especifican las propiedades InstallUrl y UpdateUrl.

  • ApplicationVersion especifica la versión de la aplicación ClickOnce. La versión es un número de cuatro dígitos. Si el último dígito es "*" (asterisco), ApplicationRevision se sustituye por el valor insertado en el manifiesto en tiempo de compilación.

  • ApplicationRevision especifica la revisión. Este valor es un entero que se incrementa cada vez que se publica en el IDE. Observe que no se incrementa automáticamente para las compilaciones realizadas en la línea de comandos.

  • Install determina si la aplicación es una aplicación instalada o se trata de una aplicación que se ejecuta desde la Web.

  • InstallUrl (no se muestra) es la ubicación desde la que los usuarios instalan la aplicación. Si se especifica, este valor se graba en el programa previo setup.exe si la propiedad IsWebBootstrapper está habilitada. También se inserta en el manifiesto de aplicación si UpdateUrl no se especifica.

  • SupportUrl (no se muestra) es la ubicación vinculada en el cuadro de diálogo Agregar o quitar programas de una aplicación instalada.

Las siguientes propiedades se establecen en el cuadro de diálogo Actualizaciones de la aplicación, al que se accede desde la página Publicar.

  • UpdateEnabled indica si la aplicación debe comprobar si hay actualizaciones.

  • UpdateMode especifica las actualizaciones en primer plano o las actualizaciones en segundo plano.

  • UpdateInterval especifica la frecuencia con la que la aplicación debe comprobar si hay actualizaciones.

  • UpdateIntervalUnits especifica si el valor UpdateInterval está en unidades de horas, días o semanas.

  • UpdateUrl (no se muestra) es la ubicación desde la que la aplicación recibe actualizaciones. Si se especifica, este valor se inserta en el manifiesto de aplicación.

Las siguientes propiedades se establecen en el cuadro de diálogo Opciones de publicación, al que se accede desde la página Publicar.

  • PublisherName especifica el nombre del publicador que se muestra en la solicitud que aparece al instalar o ejecutar la aplicación. Para una aplicación instalada, también se usa para especificar el nombre de la carpeta en el menú Inicio.

  • ProductName especifica el nombre del producto que se muestra en la solicitud que aparece al instalar o ejecutar la aplicación. Para una aplicación instalada, también se usa para especificar el nombre del acceso directo en el menú Inicio.

Las siguientes propiedades se establecen en el cuadro de diálogo Requisitos previos, al que se accede desde la página Publicar.

  • BootstrapperEnabled determina si se va a generar el programa previo setup.exe.

  • IsWebBootstrapper determina si el programa previo setup.exe funciona en la Web o en modo basado en disco.

Opciones de uso: InstallURL, SupportUrl, PublishURL, UpdateURL

En la tabla siguiente se muestran las cuatro opciones de dirección URL para la implementación de ClickOnce.

Opción de dirección URL Descripción
PublishURL Necesario para publicar la aplicación ClickOnce en un sitio web.
InstallURL Opcional. Establezca esta opción de dirección URL si el sitio de instalación es diferente de PublishURL. Por ejemplo, puede establecer PublishURL en una ruta de acceso FTP y InstallURL en una dirección URL web.
SupportURL Opcional. Establezca esta opción de dirección URL si el sitio de soporte técnico es diferente de PublishURL. Por ejemplo, puede establecer SupportURL en el sitio web de soporte técnico al cliente de su empresa.
UpdateURL Opcional. Establezca esta opción de dirección URL si la ubicación de actualización es diferente de InstallURL. Por ejemplo, puede establecer PublishURL en una ruta de acceso FTP y UpdateURL en una dirección URL web.