How to: Specify Build Events (Visual Basic)
Build events in Visual Basic can be used to run scripts, macros, or other actions as a part of the compilation process. Pre-build events occur before compilation; post-build events occur after compilation.
Build events are specified in the Build Events dialog box, accessible from the Compile page of the Project Designer.
How to Specify Pre-Build and Post-Build Events
To specify a build event
With a project selected in Solution Explorer, on the Project menu, click Properties.
Click the Compile tab.
Click the Build Events button to open the Build Events dialog box.
Enter the command-line arguments for your pre-build or post-build action, and then click OK.
Add a call statement before all post-build commands that run .bat files. For example, call C:\MyFile.bat or call C:\MyFile.bat call C:\MyFile2.bat.
Example: How to Change Manifest Information Using a Post-Build Event
The following procedure shows how to set the minimum operating system version in the application manifest using an .exe command called from a post-build event (the .exe.manifest file in the project directory). The minimum operating system version is a four-part number such as 220.127.116.11. To do this, the command will alter the <dependentOS> section of the manifest:
<dependentOS> <osVersionInfo> <os majorVersion="4" minorVersion="10" buildNumber="0" servicePackMajor="0" /> </osVersionInfo> </dependentOS>
To create an .exe command to change the application manifest
Create a console application for the command. From the File menu, click New, then Project.
In the New Project dialog box, in the Visual Basic node, select Windows, then the Console Application template. Name the project ChangeOSVersionVB.
In Module1.vb, add the following line to the other Imports statements at the top of the file:
Add the following code in 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
The command takes two arguments: the path to the application manifest (that is, the folder in which the build process creates the manifest, typically Projectname.publish), and the new operating system version.
Build the project. On the Build menu, click Build Solution.
Copy the .exe file to a directory such as C:\TEMP\ChangeOSVersionVB.exe.
Next, invoke this command in a post-build event to alter the application manifest.
To invoke a post-build event to alter the application manifest
Create a Windows application for the project to be published. From the File menu, click New, then Project.
In the New Project dialog box, in the Visual Basic node, select Windows, then the Windows Application template. Name the project VBWinApp.
With the project selected in Solution Explorer, on the Project menu, click Properties.
In the Project Designer, go to the Publish page and set Publishing location to C:\TEMP\.
Publish the project by clicking Publish Now.
The manifest file will be built and placed in C:\TEMP\VBWinApp_1_0_0_0\VBWinApp.exe.manifest. To view the manifest, right-click on the file and click Open with, then Select the program from a list, then select Notepad.
Search in the file for the <osVersionInfo> element. For example, the version might be:
<os majorVersion="4" minorVersion="10" buildNumber="0" servicePackMajor="0" />
In the Project Designer, go to the Compile tab and click the Build Events button to open the Build Events dialog box.
In the Post-build Event Command Line box, enter the following command:
C:\TEMP\ChangeOSVersionVB.exe "$(TargetPath).manifest" 5.1.2600.0
When you build the project, this command will change the minimum operating system version in the application manifest to 5.1.2600.0.
The $(TargetPath) macro expresses the full path for the executable being created, so $(TargetPath).manifest will specify the application manifest created in the bin directory. Publishing will copy this manifest to the publishing location that you set above.
Publish the project again. Go to the Publish page and click Publish Now.
View the manifest again. To view the manifest, go to the publish directory, right-click on the file and click Open with, then Select the program from a list, then select Notepad.
The version should now read:
<os majorVersion="5" minorVersion="1" buildNumber="2600" servicePackMajor="0" />