3

我的csproj中有一個MSBuild目標,用於在生成後將我的Web應用程序的文件和文件夾複製到目標路徑。在Visual Studio 2010下爲項目配置運行DefaultTarget以外的項目

<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder"> 
... 

如果我通過與目標「PublishToFileSystem」命令行調用的MSBuild一切工作正常。

但是現在我想「使用」這個目標也用於Visual Studio中的特殊配置(如Release,Debug,...)。

我如何能配置分配給另一個目標比DefaultTarget「構建」設置項目與DefaultTargets:

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

感謝,康拉德

回答

4

嘗試使用AfterBuild目標,而不是PublishToFileSystem的:

<Target Name="AfterBuild" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder"> 

或檢查Overriding Predefined Targets on MSDN

+0

在AfterBuild-Target中使用DependsOnTargets,我在AfterBuild中得到了一個循環依賴的錯誤。 – Konrad 2011-12-21 17:41:51

+0

PipelinePreDeployCopyAllFilesToOneFolder目標取決於AfterBuild目標? – Ludwo 2011-12-21 20:45:19

+0

也許PipelinePreDeployCopyAllFilesToOneFolder中的某個子任務是一個再次調用AfterBuild的構建。 – Konrad 2011-12-22 07:22:45

0

下面是可能適合您的需要的方法:如果你想爲一個特定的解決方案配置做到這一點run a custom msbuild target from VisualStudio

(這是欺騙#78在書中MSBuild Trickery

+0

嗯...希望我可以定義一個類似「ReleaseAndDeploy」的配置,我也可以在TFS-Build-Server上使用它作爲配置,而不需要任何額外的修改。我的VS-Tools中的插件似乎不是一個明確的解決方案。我只能爲其中一個配置定義另一個目標而不是DefaultTarget? – Konrad 2011-12-21 18:05:06

+0

當然,配置*可以這樣使用。只需將目標連線至Build並使用Condition =「'$(Configuration)'=='ReleaseAndDeploy'」。我從來沒有使用過這樣的配置。我的偏好是從命令行和最近的大量Powershell驅動構建。對我來說,IDE是很好的用戶界面,但對SDLC沒什麼幫助,因爲一切都與解決方案相關聯,而解決方案實際上是一個相當蹩腳的基礎。 – 2011-12-24 00:47:01

0

,你就從ciruclar依賴患像我一樣,我能想到的最簡單的事情就是編寫自己的目標作爲默認目標。該目標根據配置的條件啓動其他目標。

<Target Name="CustomBuild"> 
    <CallTarget Targets="SignAndroidPackage" Condition="'$(Configuration)' == 'UITest'"/> 
    <CallTarget Targets="Build" Condition="'$(Configuration)' != 'UITest'"/> 
</Target> 

然後只需將項目定義頂部的默認目標更改爲該CustomBuild目標。

<Project DefaultTargets="CustomBuild" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
相關問題