如何:指定建置事件 (Visual Basic)
Visual Basic 中的建置事件可以用來執行指令碼、巨集,或是做為編譯處理序一部分的其他動作。建置前事件發生在編譯之前;建置後事件則發生在編譯之後。
透過 [專案設計工具] 的 [編譯] 頁,即可存取 [建置事件] 對話方塊並指定建置事件。
注意事項 |
---|
Visual Basic 表示不支援建置事件的項的目。只有完整 Visual Studio 產品才支援這項作業。 |
如何指定建置前和建置後事件
若要指定建置事件
在 [方案總管] 中選取專案之後,請在 [專案] 功能表上,按一下 [屬性]。
按一下 [編譯] 索引標籤。
按一下 [建置事件] 按鈕,開啟 [建置事件] 對話方塊。
輸入建置前或建置後動作的命令列引數,然後按一下 [確定]。
注意事項 在執行 .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 命令來變更應用程式資訊清單
建立命令的主控台應用程式 (Console Application)。在 [檔案] 功能表中按一下 [新增],然後再按一下 [專案]。
在 [新增專案] 對話方塊的 [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],然後選取 [Windows 應用程式] 範本。將專案命名為 VBWinApp。
在 [方案總管] 中選取專案之後,請在 [專案] 功能表上,按一下 [屬性]。
在 [專案設計工具] 中,移至 [發行] 頁,並且將 [發行位置] 設定為 C:\TEMP\。
按一下 [立即發行],發行專案。
資訊清單檔案會建置並放置於 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" />