2012-03-19 158 views
26

我需要建立一個解決方案,但排除一個項目。我應該怎麼做?我對這個問題進行了很多搜索,但沒有任何幫助。如何從MSBUILD中構建項目?

的ItemGroup部上升以下例外:

無效的元素。未知的任務或數據類型。

PropertyGroup也引發了例外。

下面是我的代碼示例:

<project name="TI 8.1.6 build script"> 
    <ItemGroup> 
    <Solution Include="${ROOT}\Core\TI Core.sln" Exclude="${ROOT}\Utilities\DTS Indexing Service\Tdi.Origami.IndexUpdaterServiceSetup\Tdi.Origami.IndexUpdaterServiceSetup.wixproj"/> 
    </ItemGroup> 
... 
</project> 

所以任何人都可以幫助我嗎?

回答

44

您可以通過使用Visual Studio中的Configuration Manager Dialog排除在解決方案級別項目特定build configuration

Configuration Manager Dialog

然後,您只需在指定的構建配置到解決方案文件調用msbuild使用:

msbuild /property:Configuration=Release MySolution.sln 
+2

這並沒有幫助:( – 2012-03-20 09:26:04

+0

什麼試圖實現? – 2012-03-20 09:33:16

+0

我設置爲「調試」模式來排除項目​​,所有其他項目都設置爲「發佈」在** msbuild **屬性中,我將配置設置爲發佈,並且exlcuded項目是與其他人一起建立並且例外情況升高 – 2012-03-20 11:08:08

11

Enrico建議的解決方案是最通用的解決方案,總是工作。另一種解決方案可能是直接使用<MSBuild>任務。如果您將所有項目文件放在特定目錄下,或者能夠輕鬆枚舉所有要構建的項目(即解決方案中的項目數量不是很大),這將對您有用。

例如,該文件的MSBuild將建立你的當前目錄下的每個項目,除了特定項目:

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

    <ItemGroup> 
    <MyProjectReferences Include="**\*.*proj" /> 
    <MyProjectReferences Exclude="Utilities\DTS Indexing Service\Tdi.Origami.IndexUpdaterServiceSetup\Tdi.Origami.IndexUpdaterServiceSetup.wixproj" /> 
    </ItemGroup> 

    <Target Name="BuildAllExceptWixProject"> 
    <MSBuild Projects="@(MyProjectReferences)" Targets="Build" /> 
    </Target> 

</Project> 

然後你就可以建立一個使用命令行msbuild <myproject> /t:BuildAllExceptWixProject

+3

你是對的。但不是** ProjectReferences **,而是** ProjectReference **。而** Include **是** ProjectReference **項目的必要屬性,所以我將** Include/Exclude **放入同一項目中。它的工作原理!該項目被成功排除在外。謝謝!! – 2012-03-21 21:12:27

+1

@LubochknAndrew,組的名稱可以是任何有效的XML元素名稱。 「ProjectReference」組只是其中一個已經在標準Microsoft目標中使用的組,它並沒有使這個名稱比任何其他可以想到的名稱都更好。請注意,我答案中的示例不使用標準的Microsoft目標。 – 2016-06-16 20:26:00

相關問題