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.
Note 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 4.10.0.0. 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:
Imports System.Xml
-
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 SubThe 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" />
See Also
In the Post-build event command line text box add the following:
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs" /u "$(TargetPath)"
"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\gacutil" /u $(TargetName)
"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\gacutil" /i "$(TargetPath)"
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs" "$(TargetPath)"
In the Run the post-build event combo-box choose:
When the build updates the project output
You can add conditional build events depending on Release or Debug build. You can also use Winzip command line options to freshen a Zip file.
pushd
if $(ConfigurationName)==Release "c:\Program Files\WinZip\WZZIP.EXE" -f $(ProjectDir)$(TargetName)Runtime.zip
cd /d $(ProjectDir)
if $(ConfigurationName)==Release "c:\Program Files\WinZip\WZZIP.EXE" -f -r -p $(ProjectDir)$(TargetName)Source.zip
if $(ConfigurationName)==Release xcopy /df $(ProjectDir)$(TargetName)Source.zip \\calvinh6\c$\inetpub\wwwroot\images
if $(ConfigurationName)==Release xcopy /df $(ProjectDir)$(TargetName)Runtime.zip \\calvinh6\c$\inetpub\wwwroot\images
if $(ConfigurationName)==Release xcopy /df $(TargetPath) \\calvinh7\d$\dev\vb\BlogCrawl\bin\release
if $(ConfigurationName)==Release xcopy /df $(TargetPath) \\calvinh7v6\c$\dev\BlogCrawl
popd
See also: http://blogs.msdn.com/calvin_hsia/archive/2006/06/06/619191.aspx