2012-03-15 53 views
3

我剛開始研究msbuild,因爲我想製作自己的構建腳本。現在我可以創建只編譯一個項目的構建腳本,但是如何處理依賴關係?如何先用msbuild構建依賴項目

例如如果我有兩個使用這兩個msbuild腳本構建的項目會怎樣?

  1. projectA.xml
  2. projectB.xml

我怎麼告訴的MSBuild,當我執行projectB.xml,它應該首先執行projectA.xml?

我已經在這裏搜索了很多,但它似乎沒有得到像我這樣的起動器理解的任何東西。我會很高興看到一篇描述這篇文章的鏈接,或者只是一個小代碼示例。

我想要這種控制的原因是因爲我正在建造一個圖書館。該圖書館由幾個項目組成。開發人員應該能夠拉下庫的源代碼,並只建立他想要的庫。

其實我希望能夠從不同的項目中構建.net模塊。這就是爲什麼我想能夠運行自定義的msbuild腳本。

回答

1

我設置了我的構建腳本,以便我有幾個不會做任何事的共同目標,但使用DependsOnTargets來設置項目依賴關係並運行構建。

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

    <!-- ************************************************************************************************ --> 
    <!-- Targets that run the builds --> 
    <!-- ************************************************************************************************ --> 
    <Target Name="AutoBuild" DependsOnTargets="BuildProject1;BuildProject2;BuildInstallers"> 
    <OnError ExecuteTargets="NotifyFailure" /> 
    </Target> 
    <Target Name="FullCompile" DependsOnTargets="BuildProject1;BuildProject2"> 
    <OnError ExecuteTargets="NotifyFailure" /> 
    </Target> 

    <!-- Build Project 1 --> 
    <Target Name="BuildProject1"> 
    <!-- Use MSBuild task and point it to build project1.csproj, project1.sln or whatever your projects is --> 
    </Target> 

    <!-- Build Project 2 --> 
    <Target Name="BuildProject2"> 
    <!-- Use MSBuild task and point it to build project2.csproj, project2.sln or whatever your projects is --> 
    </Target> 

    <Target Name="BuildInstallers"> 
    <!-- Whatever logic you have for building installers --> 
    </Target> 

</Project> 
+0

由於MSBuild任務提示,我接受了這個。這正是我想要使用的。在這個任務中,我可以參考另一個項目來構建。感謝那。 – mslot 2012-03-16 12:06:42

+0

我想要構建項目而不必將其包含在我的解決方案中,這可能嗎? – 2017-03-07 17:50:22

5

如果您創建了這兩個項目的解決方案可以針對使用的MSBuild .sln文件,而不是直接建設項目,它應該如果你使用採取項目依賴:)

照顧但這標準的.csproj項目...

好,我看了一個項目,我的工作,而且是這樣的:

<ItemGroup> 
    <ProjectReference Include="..\SomeFolder\SomeProject.csproj"> 
     <Project>{1A94B405-2D01-4A09-90D5-A5B31180A03B}</Project> 
     <Name>SomeProjectNamespace</Name> 
    </ProjectReference> 
</ItemGroup> 

這裏是一個MSDN page有關引用。向下滾動,直到找到ProjectReference ...

+0

繼我的答案,也許你可以創建兩個項目,一個依賴於其他,看到了什麼的.sln和.csproj的文件是什麼樣子,也許這會告訴你怎麼做的依賴在你自己自定義腳本。 – joshuahealy 2012-03-15 22:16:28

+0

除了我最後的評論,我爲你做了這個,並編輯了我的答案,詳細信息:) – joshuahealy 2012-03-15 22:23:57

+1

+1用於提示.sln文件。如果沒有理由不希望VisualStudio管理您的構建順序,則不要重新發明輪子。 – Bronumski 2012-03-15 22:39:54

0

您不需要使用sln構建。如果您在csproj中使用項目引用,則依賴性順序由MSBuild負責。 試試吧。 Automajically。 您不需要在msbuild腳本中對依賴性順序進行排序。

+0

這並不總是奏效。當我將一個解決方案從VS 2010轉換到VS 2012時,該依賴項目永遠不會在MSBuild.exe中生成(但它在VS 2012中)。但是,按照「appclay」所述添加項目提示,它現在可以工作。 – 2014-06-27 20:59:59

相關問題