如何从命令行编译 Visual Studio 项目?

Posted

技术标签:

【中文标题】如何从命令行编译 Visual Studio 项目?【英文标题】:How do I compile a Visual Studio project from the command-line? 【发布时间】:2010-10-04 15:05:48 【问题描述】:

我正在为使用Monotone、CMake、Visual Studio Express 2008 和自定义测试的大型 C++ 解决方案编写签出、构建、分发、测试和提交周期脚本。

所有其他部分看起来都非常简单,但我不知道如何在没有 GUI 的情况下编译 Visual Studio 解决方案。

该脚本是用 Python 编写的,但我只需调用一个答案:os.system 就可以了。

【问题讨论】:

【参考方案1】:

我知道有两种方法可以做到这一点。

方法一 第一种方法(我更喜欢)是使用msbuild:

msbuild project.sln /Flags...

方法二 你也可以运行:

vcexpress project.sln /build /Flags...

vcexpress 选项立即返回并且不打印任何输出。我想这可能是你想要的脚本。

请注意,DevEnv 未随 Visual Studio Express 2008 分发(当我第一次遇到类似问题时,我花了很多时间试图弄清楚这一点)。

所以,最终结果可能是:

os.system("msbuild project.sln /p:Configuration=Debug")

您还需要确保您的环境变量正确,因为默认情况下 msbuild 和 vcexpress 不在系统路径中。要么启动 Visual Studio 构建环境并从那里运行你的脚本,要么在 Python 中修改路径(使用os.putenv)。

【讨论】:

这也适用于 Visual Studio 2010 Express。 msbuild 似乎没有随 VS 2008 一起提供 你能在“MSVS shell”之外运行它吗?【参考方案2】:

MSBuild 通常可以工作,但我之前遇到过困难。你可能会有更好的运气

devenv YourSolution.sln /Build 

【讨论】:

MSBuild 不适用于 Visual Fortran 项目 ( *.vfproc )。感谢您将我指向 devenv,确实如此。 也可以指定config:devenv YourSolution.sln /Build Debug 效果很好。也可以使用以下命令进行重建 devenv YourSolution.sln /rebuild 还可以通过在一个空格后附加调试或释放来重建发布或调试模式。例如:devenv YourSolution.sln /rebuild releasedevenv YourSolution.sln /rebuild debug 如何在.sln soluton 中定位.prj 项目?【参考方案3】:

说实话,我必须加上我的 2 美分。

您可以使用 msbuild.exe 来完成。 msbuild.exe有很多版本。

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\msbuild.exe C:\Windows\Microsoft.NET\Framework64\v3.5\msbuild.exe C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe C:\Windows\Microsoft.NET\Framework\v2.0.50727\msbuild.exe C:\Windows\Microsoft.NET\Framework\v3.5\msbuild.exe C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe

使用您需要的版本。基本上你必须使用最后一个。

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe

那么怎么做呢。

    运行COMMAND窗口

    输入msbuild.exe的路径

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe

    输入项目解决方案的路径,如

"C:\Users\Clark.Kent\Documents\visual studio 2012\Projects\WpfApplication1\WpfApplication1.sln"

    在解决方案路径之后添加您需要的任何标志。

    ENTER

请注意,您可以获得有关所有可能标志的帮助,例如

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe /帮助

【讨论】:

我真的很喜欢您为新开发人员添加的详细信息,例如在哪里可以找到 msbuild 等。【参考方案4】:

使用 msbuild 正如其他人指出的那样对我有用,但我需要做的不仅仅是这些。首先,msbuild 需要能够访问编译器。这可以通过运行来完成:

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"

然后msbuild 不在我的 $PATH 中,所以我必须通过它的显式路径运行它:

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" myproj.sln

最后,我的项目使用了一些变量,例如$(VisualStudioDir)。似乎msbuild 没有设置它们,所以我不得不通过/property 选项手动设置它们:

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" /property:VisualStudioDir="C:\Users\Administrator\Documents\Visual Studio 2013" myproj.sln

那一行终于让我可以编译我的项目了。

奖励:命令行工具似乎不需要像“免费”的基于 GUI 的 Visual Studio 社区版那样在使用 30 天后进行注册。有了 Microsoft 注册要求,该版本几乎不是免费的。如果有的话,就像在 Facebook 中一样免费......

【讨论】:

【参考方案5】:

MSBuild is your friend.

msbuild "C:\path to solution\project.sln"

【讨论】:

我已经看到由于 MSBuild 和 DevEnv 处理 .sln 文件的方式不同而在奇怪的情况下失败。【参考方案6】:

DEVENV 在许多情况下都能正常工作,但在 WIXPROJ 上构建我的 WIX 安装程序时,我得到的只是 Out 日志中的“CATASTROPHIC”错误。

这有效: MSBUILD /Path/PROJECT.WIXPROJ /t:Build /p:Configuration=Release

【讨论】:

【参考方案7】:

dotnet build 似乎是构建解决方案的最新方式。

https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-build

【讨论】:

【参考方案8】:

正确地,这里的答案中建议 MSBuild 和 DevEnv 作为从命令行构建的方法。我想指出,微软是这么说的:“一般来说,DEVENV 比直接使用 MSBuild 更受欢迎,因为你可以让 Visual Studio 处理 MSBuild 的复杂性。”

Reference

【讨论】:

也许文章改变了,但我关注了你的链接,它没有说 DEVENV 是首选。实际上,DEVENV 的 main page 建议使用 MSBUILD。 确实!他们似乎在该页面上删除了该声明。 Wayback Machine 验证了这一点:web.archive.org/web/20210502101153/https://docs.microsoft.com/…

以上是关于如何从命令行编译 Visual Studio 项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Mono编译Visual Studio C#项目

如何使用 Mono 编译 Visual Studio C# 项目

如何在命令行中使用 Visual Studio 编译 x64 代码?

是否可以从命令行运行 Visual Studio 转换向导?

使用命令行在 Visual Studio 2019 中打开 CMake 项目

qmake 可以在 Visual Studio 项目中配置命令行选项吗?