Visual Basic 中的建置事件可用來在編譯程式中執行腳本、巨集或其他動作。 編譯之前會發生建置前事件;建置後事件會在編譯之後發生。
如何指定建置前和建置後事件
若要檢視或變更 Visual Basic .NET Core 或 .NET 5 和更新版本的專案建置事件,請以滑鼠右鍵按兩下項目節點,然後選擇 [ 屬性 ] (或按 Alt+Enter),然後移至 [ 編譯>事件]。 輸入所需的命令行。 工作目錄是輸出目錄。
針對 .NET Framework 專案,請遵循下列步驟:
在方案總管 中選取專案之後,按一下 [專案] 功能表中 [屬性] 。
按一下 [編譯] 索引標籤。
按兩下 [ 建置事件] 按鈕,開啟 [ 建置事件 ] 對話框。
輸入建置前或建置後動作的命令行自變數,然後按兩下 [ 確定]。
建置事件是在 [建置事件] 對話框中指定,可從 [項目設計工具] 的 [編譯] 頁面取得。
如何指定建置前和建置後事件
若要指定建置事件
在方案總管 中選取專案之後,按一下 [專案] 功能表中 [屬性] 。
按一下 [編譯] 索引標籤。
按兩下 [ 建置事件] 按鈕,開啟 [ 建置事件 ] 對話框。
輸入建置前或建置後動作的命令行自變數,然後按兩下 [ 確定]。
備註
call在執行檔案的所有建置後命令之前新增 .bat 語句。 例如,call C:\MyFile.bat 或 call 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 命令來變更應用程式清單。
建立命令的主控台應用程式。 從 [ 檔案] 功能表中,按兩下 [ 新增],然後按下 [ 專案]。
在 [ 新增專案 ] 對話框的 [Visual Basic ] 節點中,選取 [Windows ],然後選取 [控制台應用程式 ] 範本。 將專案命名為
ChangeOSVersionVB。在 Module1.vb中,將下列這一行新增至檔案頂端的其他
Imports語句:Imports System.Xml在
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>)。 第二個自變數是新的作系統版本。
在 [建置] 功能表上,按一下 [建置方案]。
將 .exe 檔案複製到目錄,例如 C:\TEMP\ChangeOSVersionVB.exe。
接下來,在建置後事件中叫用此命令來變更應用程式指令清單。
若要叫用建置後事件來變更應用程式清單文件
建立要發行之專案的 Windows 應用程式。 從 [ 檔案] 功能表中,按兩下 [ 新增],然後按下 [ 專案]。
在 [ 新增專案 ] 對話框的 [Visual Basic ] 節點中,選取 [Windows Desktop ],然後選取 [Windows Forms 應用程式 ] 範本。 將專案命名為
VBWinApp。在方案總 管中選取專案后,單擊 [ 專案 ] 功能表上的 [ 屬性]。
在 [項目設計工具] 中,移至 [ 發佈] 頁面,並將 [發佈位置 ] 設定為 C:\TEMP。
按兩下 [ 立即發佈] 來發佈專案。
將會建構 manifest 檔案並放在 C:\TEMP\VBWinApp_1_0_0_0\VBWinApp.exe.manifest。 若要檢視指令清單,請以滑鼠右鍵按下檔案,然後按兩下 [ 開啟方式],然後按兩下 [從清單中選取程式],然後按兩下 [ 記事本]。
在檔案中搜尋
<osVersionInfo>元素。 例如,版本可能是:<os majorVersion="4" minorVersion="10" buildNumber="0" servicePackMajor="0" />在 [項目設計工具] 中,移至 [ 編譯 ] 索引卷標,然後按兩下 [ 建置事件 ] 按鈕以開啟 [ 建置事件 ] 對話框。
在 [ 建置後事件命令行 ] 方塊中,輸入下列命令:
C:\TEMP\ChangeOSVersionVB.exe "$(TargetPath).manifest" 5.1.2600.0當您建置專案時,此命令會將應用程式指令清單中的最低作系統版本變更為 5.1.2600.0。
$(TargetPath)巨集表示所建立可執行檔的完整路徑。 因此,$(TargetPath).manifest指定在 bin 目錄中建立的應用程式指令清單。 發佈會將此清單文件複製到您稍早設定的發佈位置。再次發佈專案。 移至 [ 發佈] 頁面,然後按兩下 [ 立即發佈]。
再次檢視清單。 若要檢視指令清單,請移至發佈目錄,以滑鼠右鍵按兩下檔案,然後按兩下 [ 開啟] ,然後 從清單中選取程式,然後按下 [ 記事本]。
版本現在應該顯示為:
<os majorVersion="5" minorVersion="1" buildNumber="2600" servicePackMajor="0" />