如何从命令行编译 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 release
或 devenv 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# 项目
如何在命令行中使用 Visual Studio 编译 x64 代码?
是否可以从命令行运行 Visual Studio 转换向导?