共用方式為


指定建置事件 (Visual Basic)

Visual Basic 中的建置事件可用來在編譯程式中執行腳本、巨集或其他動作。 編譯之前會發生建置前事件;建置後事件會在編譯之後發生。

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

若要檢視或變更 Visual Basic .NET Core 或 .NET 5 和更新版本的專案建置事件,請以滑鼠右鍵按兩下項目節點,然後選擇 [ 屬性 ] (或按 Alt+Enter),然後移至 [ 編譯>事件]。 輸入所需的命令行。 工作目錄是輸出目錄。

針對 .NET Framework 專案,請遵循下列步驟:

  1. 在方案總管 中選取專案之後,按一下 [專案] 功能表中 [屬性]

  2. 按一下 [編譯] 索引標籤。

  3. 按兩下 [ 建置事件] 按鈕,開啟 [ 建置事件 ] 對話框。

  4. 輸入建置前或建置後動作的命令行自變數,然後按兩下 [ 確定]。

建置事件是在 [建置事件] 對話框中指定,可從 [項目設計工具] 的 [編譯] 頁面取得。

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

若要指定建置事件

  1. 在方案總管 中選取專案之後,按一下 [專案] 功能表中 [屬性]

  2. 按一下 [編譯] 索引標籤。

  3. 按兩下 [ 建置事件] 按鈕,開啟 [ 建置事件 ] 對話框。

  4. 輸入建置前或建置後動作的命令行自變數,然後按兩下 [ 確定]。

備註

call在執行檔案的所有建置後命令之前新增 .bat 語句。 例如,call C:\MyFile.batcall C:\MyFile.bat call C:\MyFile2.bat

備註

如果您的建置前或建置後事件未順利完成,您可以藉由讓事件動作結束,並使用零 (0) 以外的程式代碼結束建置,這表示成功的動作。

您可以在腳本中參考「macros」(實際上是 MSBuild 屬性名稱)。 若要參考屬性,請使用語法 $(PropertyName),這個語法會在執行事件腳本時被屬性值取代。 如需常用值的清單,請參閱 MSBuild 通用屬性。 在專案檔、環境變數中,或在命令行建置期間使用 -p MSBuild 參數在命令行上傳遞的任何匯入檔案中,可能會有其他屬性以及定義於項目檔中。

範例:如何使用建置後的事件變更清單資訊

下列程式示範如何使用從建置後事件呼叫的命令,在應用程式指令清單 .exe 中設定最低作系統版本( .exe.manifest 專案目錄中的檔案)。 最低作業系統版本是一個由四個數字組成的格式,例如 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 Desktop ],然後選取 [Windows Forms 應用程式 ] 範本。 將專案命名為 VBWinApp

  3. 在方案總 中選取專案后,單擊 [ 專案 ] 功能表上的 [ 屬性]。

  4. [項目設計工具] 中,移至 [ 發佈] 頁面,並將 [發佈位置 ] 設定為 C:\TEMP

  5. 按兩下 [ 立即發佈] 來發佈專案。

    將會建構 manifest 檔案並放在 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" />