如何从MSBUILD中的构建中排除项目?

时间:2012-03-19 22:31:06

标签: visual-studio msbuild nant

我需要构建解决方案但排除一个项目。我该怎么办?我搜索了很多关于这个问题但没什么可以帮助的。

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>

那么有人可以帮助我吗?

5 个答案:

答案 0 :(得分:57)

您可以使用Visual Studio中的build configuration在解决方案级别排除特定Configuration Manager Dialog的项目:

Configuration Manager Dialog

然后,您只需在解决方案文件上调用msbuild,指定要使用的构建配置:

msbuild /property:Configuration=Release MySolution.sln

答案 1 :(得分:16)

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

构建它

答案 2 :(得分:1)

从 VS 2019 和 MSBuild 16.7 开始,正确的方法是使用解决方案过滤器。 Ref

答案 3 :(得分:0)

在解决方案文件(.sln)中,删除Build.0条目。例如:

Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MyProject", "MyProject.vcxproj", "{2281D9E7-5261-433D-BB04-176A61500CA3}"
EndProject

GlobalSection(ProjectConfigurationPlatforms) = postSolution
    {2281D9E7-5261-433D-BB04-176A61500CA3}.Debug|x86.Build.0 = Debug|x64

如果删除此“ Build.0”条目,它将很好地加载到解决方案中,但不会通过GUI或通过外部MSBuild构建。

答案 4 :(得分:-1)

创建一个master.proj文件:

在另一个ItemGroup中为程序添加DefaultExclude属性-将其放在解决方案的前面 -BA是加拿大人
配置=发布 发布 将master.proj放到包含程序的目录中,并用msbuild master.proj 编译所有内容,除了... HelloWorld