2012-09-19 47 views
22

我正在使用MSBuild从脚本编译我的项目。我注意到它只是一个构建,而不是一个干净/重建。如何强制MSBuild清理或重建?

我有以下几点:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build" ToolsVersion="4.0"> 
<Target Name="Build"> 
    <MSBuild Projects="$(MSBuildProjectDirectory)\myproj.csproj" Targets="Build" Properties="OutputPath=$(MSBuildProjectDirectory)\..\bin\" /> 
</Target> 

如何强制清洁/重建?

回答

29

变化

<MSBuild Projects="$(MSBuildProjectDirectory)\myproj.csproj" 
    Targets="Build" 
    Properties="OutputPath=$(MSBuildProjectDirectory)\..\bin\" /> 

<MSBuild Projects="$(MSBuildProjectDirectory)\myproj.csproj" 
    Targets="Clean;Build" 
    Properties="OutputPath=$(MSBuildProjectDirectory)\..\bin\" /> 

<MSBuild Projects="$(MSBuildProjectDirectory)\myproj.csproj" Targets="Rebuild" 
    Properties="OutputPath=$(MSBuildProjectDirectory)\..\bin\" /> 

有关详细信息,看看MSBuild Task documentation

+0

当你看到答案时看起来很明显。 prob应该得到那一个。感谢您的回答 – John

+0

新的_csproj_怎么样? – Shimmy

15

“%WINDIR%\ Microsoft.NET \框架\ v4.0.30319 \ MSBuild的” Project.sln /P:配置=推出/吨:重建

+0

在这个问题中,msbuild被用在一个项目文件中。不直接在命令提示符下。 – warunapww

+0

问题“我正在脚本中使用msbuild编译我的项目”,更好地使用命令提示符 – Geograph

+0

无论它是否回答原始问题,该代码段都帮助我得到了我需要去的地方..谢谢! – madannes

1

始终尝试使用

<MSBuild Projects="$(MSBuildProjectDirectory)\myproj.csproj" 
    Targets="Clean;Build" 
    Properties="OutputPath=$(MSBuildProjectDirectory)\..\bin\" /> 

因为根据this MSDN article,当您的解决方案中有多个项目使用“重建”作为目标时,可能会导致清理和构建以并行方式发生。这可能会导致项目依赖性问题。

但是当您使用“Clean and Build”作为目标时,只有在清理完所有项目后才会开始构建。