如何:在 MSBuild 專案中使用建置事件
建置事件是 MSBuild 在建置程式中特定階段執行的命令。 建置前事件會在建置開始之前發生;連結步驟開始之前發生預先連結事件;建置後事件會在建置成功結束之後發生。 只有在相關聯的建置步驟發生時,才會發生建置事件。 例如,如果連結步驟未執行,則不會發生連結前事件。
這三個建置事件中的每一個都會以執行之命令元素 (<Command>
) 的項目定義群組來表示,以及 MSBuild 執行建置事件時所顯示的訊息專案 (<Message>
)。 每個元素都是選擇性的,而且如果您多次指定相同的元素,則最後一個出現專案會優先。
您可以在屬性群組中指定選擇性的 use-in-build 元素 (<
build-eventUseInBuild>
),以指出是否已執行組建事件。 使用中建置項目的內容值為 或 false
。true
根據預設,除非建置中的對應項目設定為 false
,否則會執行建置事件。
下表列出每個組建事件 XML 元素:
XML 元素 | 描述 |
---|---|
PreBuildEvent |
此事件會在建置開始之前執行。 |
PreLinkEvent |
此事件會在連結步驟開始之前執行。 |
PostBuildEvent |
此事件會在建置完成之後執行。 |
下表列出每個建置中的 use-in-build 元素:
XML 元素 | 描述 |
---|---|
PreBuildEventUseInBuild |
指定是否要執行 建置 前事件。 |
PreLinkEventUseInBuild |
指定是否要執行 連結 前事件。 |
PostBuildEventUseInBuild |
指定是否要執行 建置 後事件。 |
範例
下列範例可以在逐步解說:使用 MSBuild 建立C++ Project 中建立之myproject.vcxproj檔案的 Project 元素內新增。 建置前事件會建立main.cpp的複本;預先連結事件會建立main.obj的複本;而建置後事件會建立myproject.exe的複本。 如果專案是使用發行組態建置,則會執行組建事件。 如果使用偵錯組態建置專案,則不會執行建置事件。
<ItemDefinitionGroup>
<PreBuildEvent>
<Command>copy $(ProjectDir)main.cpp $(ProjectDir)copyOfMain.cpp</Command>
<Message>Making a copy of main.cpp </Message>
</PreBuildEvent>
<PreLinkEvent>
<Command>copy $(ProjectDir)$(Configuration)\main.obj $(ProjectDir)$(Configuration)\copyOfMain.obj</Command>
<Message>Making a copy of main.obj</Message>
</PreLinkEvent>
<PostBuildEvent>
<Command>copy $(ProjectDir)$(Configuration)\$(TargetFileName) $(ProjectDir)$(Configuration)\copyOfMyproject.exe</Command>
<Message>Making a copy of myproject.exe</Message>
</PostBuildEvent>
</ItemDefinitionGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<PreBuildEventUseInBuild>true</PreBuildEventUseInBuild>
<PreLinkEventUseInBuild>true</PreLinkEventUseInBuild>
<PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<PreBuildEventUseInBuild>false</PreBuildEventUseInBuild>
<PreLinkEventUseInBuild>false</PreLinkEventUseInBuild>
<PostBuildEventUseInBuild>false</PostBuildEventUseInBuild>
</PropertyGroup>