如何:在 MSBuild 專案中使用建置事件
建置事件是 MSBuild 在建置程式中特定階段執行的命令。 建置前事件會在建 置開始之前發生; 連結步驟開始之前發生預先連結 事件;建 置後事件會在建 置成功結束之後發生。 只有在相關聯的建置步驟發生時,才會發生建置事件。 例如,如果連結步驟未執行,則不會發生連結前事件。
這三個建置事件中的每一個都會以執行之命令元素 ( <Command>
) 的專案定義群組來表示,以及 MSBuild 執行建置事件時 所顯示的訊息專案 ( <Message>
)。 每個元素都是選擇性的,而且如果您多次指定相同的元素,則最後一個出現專案會優先。
您可以在屬性群組中指定選擇性的 use-in-build 元素 ( <
build-event UseInBuild>
),以指出是否已執行組建事件。 使用中建置專案的內容 值為 或 false
。 true
根據預設,除非建置中的對應 專案設定為 false
,否則會執行建 置事件。
下表列出每個組建事件 XML 元素:
XML 元素 | 描述 |
---|---|
PreBuildEvent |
此事件會在建置開始之前執行。 |
PreLinkEvent |
此事件會在連結步驟開始之前執行。 |
PostBuildEvent |
此事件會在建置完成之後執行。 |
下表列出每個建置中的 use-in-build 元素:
XML 元素 | 描述 |
---|---|
PreBuildEventUseInBuild |
指定是否要執行 建置 前事件。 |
PreLinkEventUseInBuild |
指定是否要執行 連結 前事件。 |
PostBuildEventUseInBuild |
指定是否要執行 建置 後事件。 |
範例
下列範例可以在逐步解說:使用 MSBuild 建立 C++ 專案 中 建立之 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>