如何:指定生成事件 (Visual Basic)

Visual Basic 中的生成事件可以用来运行脚本、宏或作为编译过程一部分的其他操作。 预先生成事件在编译之前发生;后期生成事件在编译之后发生。

生成事件是在**“生成事件”对话框中指定的,该对话框可以从“项目设计器”“编译”**页进行访问。

备注

快的 Visual Basic 不支持生成操作条目。只有完整的 Visual Studio 产品才支持此操作。

如何指定预先生成和后期生成事件

指定生成事件

  1. 在**“解决方案资源管理器”中选定一个项目,然后在“项目”菜单中单击“属性”**。

  2. 单击**“编译”**选项卡。

  3. 单击**“生成事件”按钮以打开“生成事件”**对话框。

  4. 输入预先生成或后期生成操作的命令行参数,然后单击**“确定”**。

    备注

    在运行 .bat 文件的所有后期生成命令之前添加一个 call 语句。例如,call C:\MyFile.bat 或 call C:\MyFile.bat call C:\MyFile2.bat。

    备注

    如果预先生成事件或后期生成事件不能成功完成,您可以通过使事件操作退出来终止生成,并显示指示操作成功的代码零 (0) 以外的其他代码。

示例:如何使用后期生成事件更改清单信息

下面的过程说明如何使用从后期生成事件(项目目录中的 .exe.manifest 文件)中调用的 .exe 命令设置应用程序清单中的操作系统最低版本。 操作系统最低版本是一个由四个部分组成的编号,如 4.10.0.0。 为此,该命令会更改清单的 <dependentOS> 节:

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

创建用于更改应用程序清单的 .exe 命令

  1. 针对该命令,创建一个控制台应用程序。 在**“文件”菜单上,单击“新建”,再单击“项目”**。

  2. 在**“新建项目”对话框的“Visual Basic”节点中,选择“Windows”,再选择“控制台应用程序”**模板。 将项目命名为 ChangeOSVersionVB。

  3. 在 Module1.vb 中,将以下行添加到文件顶部的其他 Imports 语句:

    Imports System.Xml
    
  4. 将以下代码添加到 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
    

    此命令带两个参数。 第一个参数为到应用程序清单的路径(即生成过程在其中创建清单的文件夹,通常为 Projectname.publish)。 第二个参数为新的操作系统版本。

  5. 在**“生成”菜单上,单击“生成解决方案”**。

  6. 将 .exe 文件复制到一个目录(如 C:\TEMP\ChangeOSVersionVB.exe)。

然后,在后期生成事件中调用此命令以更改应用程序清单。

调用后期生成事件以更改应用程序清单

  1. 为要发布的项目创建一个 Windows 应用程序。 在**“文件”菜单上,单击“新建”,再单击“项目”**。

  2. 在**“新建项目”对话框中的“Visual Basic”节点中,选择“Windows”,再选择“Windows 应用程序”**模板。 将项目命名为 VBWinApp。

  3. 在**“解决方案资源管理器”中选择该项目,然后在“项目”菜单中单击“属性”**。

  4. 在“项目设计器”中,转到**“发布”页,将“发布位置”**设置为 C:\TEMP\。

  5. 通过单击**“立即发布”**发布该项目。

    将生成清单文件,并将其置于 C:\TEMP\VBWinApp_1_0_0_0\VBWinApp.exe.manifest 中。 若要查看该清单,请右击该文件并单击**“打开方式”,再单击“从列表中选择程序”,然后单击“记事本”**。

    在该文件中搜索 <osVersionInfo> 元素。 例如,版本可能是:

    <os majorVersion="4" minorVersion="10" buildNumber="0" servicePackMajor="0" />
    
  6. 在“项目设计器”中,转到**“编译”选项卡,然后单击“生成事件”按钮打开“生成事件”**对话框。

  7. 在**“后期生成事件命令行”**框中,输入下面的命令:

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

    生成项目时,此命令会将应用程序清单中的操作系统最低版本更改为 5.1.2600.0。

    $(TargetPath) 宏表示所创建的可执行文件的完整路径。 因此,$(TargetPath).manifest 将指定在 bin 目录中创建的应用程序清单。 发布时会将此清单复制到您先前设置的发布位置。

  8. 重新发布项目。 转到**“发布”页,单击“立即发布”**。

    再次查看该清单。 若要查看该清单,请转到发布目录,右击该文件并单击**“打开方式”,再单击“从列表中选择程序”,然后单击“记事本”**。

    版本应显示为:

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

请参见

任务

如何:指定生成事件 (C#)

参考

“项目设计器”->“编译”页 (Visual Basic)

“项目设计器”->“发布”页

预生成事件/生成后事件命令行对话框

其他资源

管理编译属性