Share via


HOW TO:指定建置事件 (Visual Basic)

Visual Basic 中的建置事件可以用來執行指令碼、巨集,或是做為編譯處理序一部分的其他動作。 建置前事件發生在編譯之前;建置後事件則發生在編譯之後。

透過 [專案設計工具] 的 [編譯] 頁,即可存取 [建置事件] 對話方塊並指定建置事件。

如何指定建置前和建置後事件

若要指定建置事件

  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. 建立命令的主控台應用程式 (Console Application)。 在 [檔案] 功能表中按一下 [新增],然後再按一下 [專案]。

  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" />
    

請參閱

工作

HOW TO:指定建置事件 (C#)

參考

專案設計工具、編譯頁 (Visual Basic)

專案設計工具、發行頁

建置前事件/建置後事件命令列對話方塊

其他資源

管理編譯屬性