如何从批处理文件中执行'msbuild'命令

23

我想创建一个批处理文件,让我的VS项目能够在一次点击中进行构建。每天我都要按照以下步骤操作:

  1. 作为管理员打开cmd控制台
  2. 进入我的项目/解决方案的路径(使用CD..、CD命令)
  3. 输入以下命令来构建项目:

    msbuild mySolution.sln /p:configuration=debug

如前所述,我想通过单击一个按钮来完成所有这些步骤。因此,我正在尝试创建一个.bat文件来实现此操作。

以下是我的批处理文件的代码:

set location="C:\myPath\..\MyFolderSolution"
set pathMSBuild = "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe"

@echo off
cls

call %pathMSBuild%
cd %location%
msbuild.exe "lucre.sln" /p:configuration=debug
pause

然而,当我尝试执行批处理文件时,出现以下错误: “msbuild”不是内部或外部命令,也不是可运行的程序或批处理文件。

是否有任何线索或帮助可以知道是否可能以及如何执行将非常感激。

谢谢!

4个回答

22

您所在的目录不正确,需要切换到包含msbuild的目录。请尝试以下命令:

set pathMSBuild="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\"
@echo off
cls
cd %pathMSBuild%
msbuild.exe "C:\myPath\..\MyFolderSolution\lucre.sln" /p:configuration=debug
pause

或者您可以将msbuild目录添加到您的路径中,跳过带有set和cd的行。


嗨,史蒂夫。它运行良好;-)正如你所提到的,我被指向了一个不同的位置。非常感谢。 - MikePR
3
最好使用%WinDir%而不是C:\Windows\ - knocte
请勿在名称和值之间使用空格;SET foo = bar 不起作用,但 SET foo=bar 可以正常工作(我无法编辑帖子,因为“编辑必须至少为6个字符”)。 - Xavier Peña

4
您可以将MSBuild.exe所在的目录添加到PATH环境变量中,这样您就可以随时调用msbuild。
因此,在批处理文件中,它可能像这样:
cd C:\PathToSoultion\
msbuild TheSolutionName.sln /p:configuration=debug
pause

我知道这个问题已经过去了几年,但我希望这可以帮助到某些人。


4

两个答案都使用了硬编码路径,这可能并不总是有效的。 使用以下内容代替:

@if exist "%VS100COMNTOOLS%vsvars32.bat" call "%VS100COMNTOOLS%vsvars32.bat"

VS100更改为任何其他版本,您还可以逐行放置这些行以支持多个版本的VS同时运行:

@if exist "%VS100COMNTOOLS%vsvars32.bat" call "%VS100COMNTOOLS%vsvars32.bat"
@if exist "%VS140COMNTOOLS%vsvars32.bat" call "%VS140COMNTOOLS%vsvars32.bat"

如果这样做,你将不再依赖于特定版本的.Net Framework或Visual Studio。

那些变量很有用,谢谢。在同一目录下,批处理文件VsMSBuildCmd.bat似乎更具体地旨在创建调用MSBuild.exe的环境。 - Reinier Torenbeek

2
如果您不想转到msbuild安装目录,也可以像这样加载Visual Studio环境变量:
call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86_amd64

(参见这个问题

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