如何在Visual Studio的后期构建事件中使用msbuild?

12

我正在尝试在我的Visual Studio项目中配置YUICompressor.NET

据我所知,我需要创建一个.proj文件并将其添加到我的解决方案中。之后,我需要创建一个后置构建事件,来构建这个.proj文件,这样我就能得到想要的输出(压缩后的js/css文件)。

所以,我有:

visual studio solution explorer

这个.proj文件包含:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/MsBuild/2003">

  <UsingTask TaskName="CssCompressorTask" AssemblyFile="\..\packages\YUICompressor.NET.MSBuild.2.7.0.0\lib\NET20\Yahoo.Yui.Compressor.Build.MsBuild.dll" />
  <UsingTask TaskName="JavaScriptCompressorTask" AssemblyFile="\..\packages\YUICompressor.NET.MSBuild.2.7.0.0\lib\NET20\Yahoo.Yui.Compressor.Build.MsBuild.dll" />

  <Target Name="Minify">

    <ItemGroup>
      <!-- Single files, listed in order of dependency -->
      <CssFiles Include="Content\*.css"/>
      <JavaScriptFiles Include="Scripts\*.js"/>      
    </ItemGroup>

    <CssCompressorTask
          SourceFiles="@(CssFiles)"
          OutputFile="Content\min.css"
       />

    <JavaScriptCompressorTask
          SourceFiles="@(JavaScriptFiles)"
          OutputFile="Scripts\min.js"
       />

  </Target>
</Project>

我正在尝试按照以下方式构建它:

在此输入图片描述

我收到了以下错误:

The command "msbuild C:\Users\Me\Desktop\MvcApplicationExample\MvcApplicationExample\YuiCompressorMsBuild.proj" exited with code 9009.

这个错误提示“msbuild”不是一个有效的命令。那么,我该如何构建这种类型的项目呢?(我已经按照这个教程进行了操作:youtube

感谢任何帮助。


1
错误9009只是表示“命令失败”,它并没有告诉你为什么失败。要了解失败的原因,您需要查看“输出”窗口。 - Hans Passant
感谢@HansPassant的提示。我的输出窗口显示:'msbuild'不是内部或外部命令。那么,我应该如何构建项目?YouTube视频显示演示者通过cmd执行msbuild。我认为我可以在后期构建事件中使用它。 - Ricardo
3个回答

30

就像您所说的那样,可能是Visual Studio找不到MSBuild命令,尝试使用以下命令

"$(MSBuildBinPath)\msbuild.exe"

使用完整的msbuild路径。

更新(供将来参考)

根据Steve Medley的评论,您不应忘记封装引号。


它解决了我的问题!谢谢。 - Ricardo
我的 MSBuild 也无法以这种方式工作,不是一个有效的命令。 - Chaitanya Gadkari
@shyam_ 你看到 Steve Medley 的评论了吗? - vfabre
“你不应该忘记加上引号!”确实! - Varlain Systems

6

vfabre使用$(MSBuildBinPath)\msbuild.exe是正确的,但还有一点要注意。由于msbuild文件路径中通常会有空格,因此应将其用引号括起来。


1

嗯,可能存在的一个问题是你想将其设置为后构建事件,但它被设置为前构建命令行。


谢谢您的观察,但不幸的是它并没有解决我的问题。我已经编辑了图片,但仍然出现同样的错误。 - Ricardo
啊,那个问题刚刚引起了我的注意,所以我希望那就是唯一的问题。我会仔细检查的。 - frasnian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接