2014-04-08 71 views
3

我使用VS2012在csproj文件上有以下目標,我想在構建完成後在項目上運行「發佈」。錯誤MSB4006:涉及目標的目標依賴關係圖中存在循環依賴關係

這使我以下錯誤「的錯誤MSB4006:有在目標依賴圖涉及靶的循環依賴關係‘

<Target Name="AfterBuild"> 
    <Message Text="Running Publish..." Importance="high"/> 
    <MSBuild Projects="$(ProjectPath)" Properties="DeployOnBuild=true;PublishProfile=WebDeploy;CreatePackageOnPublish=True;VisualStudioVersion=11.0"/> 
</Target> 

我試圖與

<Exec Command="$(MSBuildBinPath)\MSBuild C:\MyProj.csproj /p:DeployOnBuild=true /p:PublishProfile=WebDeploy /p:CreatePackageOnPublish=True /p:VisualStudioVersion=11.0" ContinueOnError="false" /> 
更換的MSBuild步驟AfterBuild’」

以上操作會導致構建/發佈一遍又一遍地運行。

我嘗試命名目標不同,通過另一個目標調用它無濟於事。

如何在項目中運行「發佈」而不進入重複週期?這可以用另一種方式完成嗎?

+0

看看這些解決方案將幫助: http://stackoverflow.com/questions/3158341/build-website-deployment-package-as-a-postbuild-event –

回答

2

如果你只是建立在Visual Studio中,然後把這樣的事情到您的csproj文件(末)將工作:

<Target Name="Deploy" AfterTargets="Build"> 
    <MSBuild 
    Projects="$(ProjectPath)" 
    Targets="WebPublish" 
    Properties="PublishProfile=LocalDeploy" 
    /> 
</Target> 

但是,如果你建立與MSBuild的,這將導致一個循環依賴。我還沒有想出一個解決方案,可以讓你發佈在Visual Studio和MSBuild中都能運行的版本。

0

以前我在用Visual Studio和TFS Server構建,它工作正常,但是當我移動到GO-CD時,以下代碼導致創建包的循環依賴。

<Target Name="CopyLinkedContentFiles" AfterTargets="Build" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder"> 
<Copy SourceFiles="%(Content.Identity)" 
     DestinationFiles="%(Content.Link)" 
     SkipUnchangedFiles='true' 
     OverwriteReadOnlyFiles='true' 
     Condition="'%(Content.Link)' != ''" />