运行MSBuild,尊重卸载的项目
在Visual Studio中,您可以卸载项目,并且在构建解决方案(右键单击/构建)时,未构建卸载的项目。但是,当你从命令行运行MSBuild时,像这样;运行MSBuild,尊重卸载的项目
C:\Windows\Microsoft.NET\Framework\v3.5\msbuild.exe
"$slnFile" /t:build /p:Configuration=Debug /verbosity:minimal
项目为建成。有没有办法让MSBuild尊重在Visual Studio中卸载的项目?
情况是,我们有一个解决方案与一些项目。其中一个需要特殊的软件来构建,而且存在于我们的构建机器上,而不是所有的开发人员机器上。这意味着我不能直接执行命令行构建,或者遇到流氓项目时失败。
任何想法?
[编辑:MSBuild必须能够做到这一点,因为Visual Studio使用MSBuild做建设。什么是VS做的命令行不是?]
MSBuild对解决方案中项目的加载状态一无所知,所以你试图做的事情是不可能的。
作为一种替代方法,您可以定义名为BUILD_MACHINE(使用Build -> Configuration Manager
菜单)的新构建配置。在此构建配置中,启用您的所有项目。这就是您在构建机器时构建的配置。如果您禁用调试和版本构建配置(使用相同的菜单选项)中的特定项目,则可以在开发机器上构建这些配置,而无需卸载不想构建的项目。
MSBuild尊重构建配置,因此您可以使用Visual Studio或MSBuild构建非构建机器构建配置(例如,调试,发布),并且不会构建令人讨厌的项目。
有关是否卸载项目的信息不会进入sln文件,而是在xxx.user文件中。因此,MSBuild不知道它。
最好的办法是创建一个包含只随处建的项目,例如一个简单的MSBuild文件:
<!--build selection of projects-->
<Project
ToolsVersion="3.5"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<DevMachine Include="A\b.vcproj"/>
<DevMachine Include="B\b.vcproj"/>
<DevMachine Include="C\c.vcproj"/>
</ItemGroup>
<ItemGroup>
<BuildMachine Include="D\d.vcproj"/>
<BuildMachine Include="E\e.vcproj"/>
</ItemGroup>
<Target Name="All">
<CallTarget Targets="MakeDevMachine"/>
<CallTarget Targets="MakeBuildMachine"/>
</Target>
<Target Name="MakeDevMachine">
<VCBuild
Projects="@(DevMachine)"
/>
</Target>
<Target Name="MakeBuildMachine">
<VCBuild
Projects="@(BuildMachine)"
/>
</Target>
</Project>
只有撤退是你必须与你的解决方案文件保持同步。
可能的解决方案是使用devenv /build ConfigurationName file.sln
而不是直接使用MSBuild。
但是,在您的解决方案中,卸载项目不是正确的解决方案。正如我以前的人所说的,为构建机器使用单独的配置。
当Visual Studio构建时,它很可能会明确地将项目传递给MSBuild而不是解决方案文件。这就是它可以跳过项目的方式。我的答案详细说明了一种可以做你想做的替代方法。 – adrianbanks 2010-11-24 11:56:42