VS 2013中的构建后任务失败

Aus*_*tin 1 msbuild msbuild-task less visual-studio-2013

在Visual Studio 2012中,我运行了以下Post-Build任务来编译和组合我的LESS文件:

$(MSBuildBinPath)\msbuild.exe "$(ProjectDir)MSBuildSettingsLess.xml"
Run Code Online (Sandbox Code Playgroud)

我的MSBuildSettingsLess.xml看起来像:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/MsBuild/2003">
    <Target Name="CompileDotlessCss">
        <ItemGroup>
            <Binaries Include="*.dll;*.exe"/>
        </ItemGroup>

        <!-- Compile dotLess CSS into minified full CSS -->
        <Exec Command="$(SolutionDir)..\Tools\dotless.compiler.exe $(ProjectDir)..\GMHC\Content\less\responsive.less $(ProjectDir)..\GMHC\Content\bootstrap-responsive.less.css"/>
        <Exec Command="$(SolutionDir)..\Tools\dotless.compiler.exe $(ProjectDir)..\GMHC\Content\less\bootstrap.less $(ProjectDir)..\GMHC\Content\bootstrap.less.css"/>
    </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

在Visual Studio 2013中,失败并出现以下错误:

命令"C:\ Program Files(x86)\ MSBuild\12.0\bin\msbuild.exe"C:\ Users\Administrator\Documents\Projects\MedicalMissions\GMHC\MSBuildSettingsLess.xml退出,代码为9009.

输出窗口显示以下内容:

1>'C:\ Program'不被识别为内部或外部命令,
1>可操作程序或批处理文件.
1> C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(4429,5):错误MSB3073:命令"C:\ Program Files(x86)\ MSBuild\12.0\bin\msbuild.exe"C:\ Users\Administrator\Documents\Projects\MedicalMissions\GMHC\MSBuildSettingsLess.xml"

知道为什么失败或者如何走到最底层?

Aus*_*tin 17

答案其实很简单,我只需用引号括起来.所以新的Post-Build任务是:

"$(MSBuildBinPath)\msbuild.exe" "$(ProjectDir)MSBuildSettingsLess.xml"
Run Code Online (Sandbox Code Playgroud)

看起来它也向后兼容VS 2012.

  • 根本原因很简单,从VS2013 MSBuild开始成为VS而不是.NET Framework的一部分.VS路径包含空格,而.NET Framework路径没有.http://blogs.msdn.com/b/visualstudio/archive/2013/07/24/msbuild-is-now-part-of-visual-studio.aspx (3认同)