2011-11-25 105 views
1

我有一個項目,它有一些後期構建事件,可以爲其他項目進行一些複製。不幸的是,我不能改變它,並且被要求寫一個構建腳本以便在CI服務器上使用。當從MSBuild直接構建項目時停止發佈構建事件

問題是構建後的步驟運行調試/釋放bin文件夾,並通過構建腳本編譯到不同的文件夾。因此,一種解決方案是讓項目按原樣構建,然後手動將bin文件夾中的所有文件複製到我正在使用的輸出文件夾中。然而,這感覺就像一個黑客,所以我想知道如果有一種方法讓MSBuild任務告訴解決方案,它正在建立忽略PostBuild事件,我相信你可以設置一個屬性PostBuildEvent ='',但它似乎沒有從發生阻止他們......

這裏是構建腳本目標的例子:

<Target Name="Compile" DependsOnTargets="Clean;"> 
    <MSBuild Projects="$(SourceDirectory)\SomeSolution.sln" 
      Properties="Configuration=Release; OutputPath=$(CompilationDirectory); PostBuildEvent=''" /> 
</Target> 

人有之前做了類似的話?

回答

1

禁用所有PostBuildEvents,設置CustomAfterMicrosoftCommonTargets到C:\ PostBuild.config(或任何你命名的文件),並有PostBuild.config是:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="PostBuildEvent"/> 
</Project> 

添加/號碼:CustomAfterMicrosoftCommonTargets =「C :\ PostBuild.config」到你的MSBuild命令行

或更新您的MSBuild任務屬性:

<MsBuild Projects="$(ProjectTobuild)" Properties="Configuration=$(Configuration);Platform=$(Platform);CustomAfterMicrosoftCommonTargets='C:\PostBuild.config'" Targets="Build"/> 
+0

對不起,如果我有點簡單,但你能詳細說明嗎?你是說添加一個命令行參數?就好像這種情況我不能這樣做,因爲CI服務器直接運行構建腳本而沒有命令行。 – Grofit

+0

如果您使用的是TFS CI服務器,您可以在Process選項卡上添加額外的msbuild參數 – Ludwo

+0

我更新了我的答案 – Ludwo

0

要禁用項目一級FO PostBuildEvents MSBuild,只需將這些代碼放在.csproj中:

<Target Name="BeforeBuild"> 
    <PropertyGroup> 
    <PostBuildEvent></PostBuildEvent Condition="'$(BuildingInsideVisualStudio)' == 'false' Or '$(BuildingInsideVisualStudio)' != 'true'"> 
    </PropertyGroup> 
</Target> 
相關問題