Compartir a través de


Especificar eventos de compilación (Visual Basic)

Los eventos de compilación en Visual Basic se pueden usar para ejecutar scripts, macros u otras acciones como parte del proceso de compilación. Los eventos previos a la compilación se producen antes de la compilación; Los eventos posteriores a la compilación se producen después de la compilación.

Cómo especificar eventos anteriores a la compilación y posteriores a la compilación

Para ver o cambiar los eventos de compilación de un proyecto de Visual Basic .NET Core o .NET 5 y versiones posteriores, haga clic con el botón derecho en el nodo del proyecto y elija Propiedades (o presione Alt+Entrar), vaya a Compile>Events. Escriba la línea de comandos deseada. El directorio de trabajo es el directorio de salida.

Para los proyectos de .NET Framework, siga estos pasos:

  1. Seleccione un proyecto en el Explorador de solucionesy, en el menú Proyecto , haga clic en Propiedades.

  2. Haga clic en la pestaña Compilar.

  3. Haga clic en el botón Eventos de compilación para abrir el cuadro de diálogo Eventos de compilación.

  4. Escriba los argumentos de línea de comandos para la acción anterior o posterior a la compilación y después haga clic en Aceptar.

Los eventos de compilación se especifican en el cuadro de diálogo Eventos de compilación, disponible en la página Compilar del Diseñador de proyectos.

Cómo especificar eventos anteriores a la compilación y posteriores a la compilación

Para especificar un evento de compilación

  1. Seleccione un proyecto en el Explorador de solucionesy, en el menú Proyecto , haga clic en Propiedades.

  2. Haga clic en la pestaña Compilar.

  3. Haga clic en el botón Eventos de compilación para abrir el cuadro de diálogo Eventos de compilación.

  4. Escriba los argumentos de línea de comandos para la acción anterior o posterior a la compilación y después haga clic en Aceptar.

Nota

Agregue una instrucción call antes de todos los comandos posteriores a la compilación que ejecuten archivos .bat. Por ejemplo, call C:\MyFile.bat o call C:\MyFile.bat call C:\MyFile2.bat.

Nota

Si el evento anterior o posterior a la compilación no se completa correctamente, puede finalizar la compilación haciendo que la acción de evento salga con un código distinto de cero (0), lo que indica una acción correcta.

Ejemplo: Cómo cambiar la información del manifiesto mediante un evento posterior a la compilación

En el procedimiento siguiente se muestra cómo establecer la versión mínima del sistema operativo en el manifiesto de aplicación mediante un comando .exe llamado desde un evento posterior a la compilación (el archivo .manifest.exeen el directorio del proyecto). La versión mínima del sistema operativo es un número de cuatro partes, como 4.10.0.0. Para ello, el comando cambiará la sección <dependentOS> del manifiesto:

<dependentOS>
   <osVersionInfo>
      <os majorVersion="4" minorVersion="10" buildNumber="0" servicePackMajor="0" />
   </osVersionInfo>
</dependentOS>

Para crear un comando .exe para cambiar el manifiesto de aplicación

  1. Cree una aplicación de consola para el comando . En el menú Archivo, haga clic en Nuevo y después haga clic en Proyecto.

  2. En el cuadro de diálogo Nuevo Proyecto, en el nodo Visual Basic, seleccione Windows y, a continuación, la plantilla Console Application. Asigne al proyecto el nombre ChangeOSVersionVB.

  3. En Module1.vb, agregue la línea siguiente a las demás instrucciones Imports de la parte superior del archivo:

    Imports System.Xml
    
  4. Agregue el código siguiente en Sub Main:

    Sub Main()
       Dim applicationManifestPath As String
       applicationManifestPath = My.Application.CommandLineArgs(0)
       Console.WriteLine("Application Manifest Path: " & applicationManifestPath.ToString)
    
       'Get version name
       Dim osVersion As Version
       If My.Application.CommandLineArgs.Count >= 2 Then
          osVersion = New Version(My.Application.CommandLineArgs(1).ToString)
       Else
          Throw New ArgumentException("OS Version not specified.")
       End If
       Console.WriteLine("Desired OS Version: " & osVersion.ToString())
    
       Dim document As XmlDocument
       Dim namespaceManager As XmlNamespaceManager
       namespaceManager = New XmlNamespaceManager(New NameTable())
       With namespaceManager
          .AddNamespace("asmv1", "urn:schemas-microsoft-com:asm.v1")
          .AddNamespace("asmv2", "urn:schemas-microsoft-com:asm.v2")
       End With
    
       document = New XmlDocument()
       document.Load(applicationManifestPath)
    
       Dim baseXPath As String
       baseXPath = "/asmv1:assembly/asmv2:dependency/asmv2:dependentOS/asmv2:osVersionInfo/asmv2:os"
    
       'Change minimum required OS Version.
       Dim node As XmlNode
       node = document.SelectSingleNode(baseXPath, namespaceManager)
       node.Attributes("majorVersion").Value = osVersion.Major.ToString()
       node.Attributes("minorVersion").Value = osVersion.Minor.ToString()
       node.Attributes("buildNumber").Value = osVersion.Build.ToString()
       node.Attributes("servicePackMajor").Value = osVersion.Revision.ToString()
    
       document.Save(applicationManifestPath)
    End Sub
    

    El comando toma dos argumentos. El primer argumento es la ruta de acceso al manifiesto de aplicación (es decir, la carpeta en la que el proceso de compilación crea el manifiesto, normalmente <ProjectName>.publish). El segundo argumento es la nueva versión del sistema operativo.

  5. En el menú Compilar , haga clic en Compilar solución.

  6. Copie el archivo .exe en un directorio como C:\TEMP\ChangeOSVersionVB.exe.

    A continuación, invoque este comando en un evento posterior a la compilación para cambiar el manifiesto de aplicación.

Para invocar un evento posterior a la compilación para cambiar el manifiesto de aplicación

  1. Cree una aplicación de Windows para que el proyecto se publique. En el menú Archivo, haga clic en Nuevo y después haga clic en Proyecto.

  2. En el cuadro de diálogo Nuevo proyecto, en el nodo Visual Basic, seleccione Escritorio de Windows y, después, la plantilla Aplicación de Windows Forms. Asigne al proyecto el nombre VBWinApp.

  3. Con el proyecto seleccionado en el Explorador de soluciones y, en el menú Proyecto, haga clic en Propiedades.

  4. En el Diseñador de proyectos, vaya a la página Publicar y establezca Ubicación de publicación en C:\TEMP.

  5. Para publicar el proyecto, haga clic en Publicar ahora.

    El archivo de manifiesto se compilará y se ubicará en C:\TEMP\VBWinApp_1_0_0_0\VBWinApp.exe.manifest. Para ver el manifiesto, haga clic con el botón derecho en el archivo y haga clic en Abrir cony, a continuación, haga clic en Seleccionar el programa de una listay, a continuación, haga clic en Bloc de notas.

    Busque en el archivo el elemento <osVersionInfo>. Por ejemplo, la versión podría ser:

    <os majorVersion="4" minorVersion="10" buildNumber="0" servicePackMajor="0" />
    
  6. En el Diseñador de proyectos, vaya a la pestaña Compilar y haga clic en el botón Eventos de compilación para abrir el cuadro de diálogo Eventos de compilación.

  7. En el cuadro Línea de comandos del evento posterior a la compilación, escriba el comando siguiente:

    C:\TEMP\ChangeOSVersionVB.exe "$(TargetPath).manifest" 5.1.2600.0

    Al compilar el proyecto, este comando cambiará la versión mínima del sistema operativo en el manifiesto de aplicación a 5.1.2600.0.

    La macro $(TargetPath) expresa la ruta de acceso completa para el archivo ejecutable que se va a crear. Por lo tanto, $(TargetPath).manifest especificará el manifiesto de la aplicación creado en el directorio bin. La publicación copiará este manifiesto en la ubicación de publicación que ha establecido anteriormente.

  8. Vuelva a publicar el proyecto. Vaya a la página Publicar y haga clic en Publicar ahora.

    Vuelva a ver el manifiesto. Para ver el manifiesto, vaya al directorio de publicación, haga clic con el botón derecho en el archivo y haga clic en Abrir con y, a continuación, Seleccione el programa de una listay, a continuación, haga clic en Bloc de notas.

    La versión debería leerse ahora:

    <os majorVersion="5" minorVersion="1" buildNumber="2600" servicePackMajor="0" />