如何自动化(从命令行)安装 Visual Studio Build Tools 构建环境,适用于 C++、.NET、C# 等

Posted

技术标签:

【中文标题】如何自动化(从命令行)安装 Visual Studio Build Tools 构建环境,适用于 C++、.NET、C# 等【英文标题】:How to automate (from command-line) the installation of a Visual Studio Build Tools build environment, for C++, .NET, C#, etc 【发布时间】:2020-10-14 12:29:12 【问题描述】:

注意:我已经阅读了How can I install the VS2017 version of msbuild on a build server without installing the IDE?,但这并不能回答完全无 GUI 的纯脚本安装。


多年来,我注意到以下几点:

我从 Github 下载了一个项目;或者打开我的一个旧项目(比如 4 年前)

运行msbuild.exe theproject.sln

糟糕,我没有正确的 Visual Studio 版本/.NET Framework 版本/缺少正确的 SDK(示例情况 here 等等)

然后花 X 小时浏览像 https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019 这样的网站,安装一个软件包,然后发现它不是正确的(msbuild 仍然失败),下载另一个软件包,安装它等等。

最后你已经下载了 8 GB 的包,等待下载,等待安装,等待重启,但你仍然不确定它是否有效

您的计算机现在一团糟,同时安装了 5 个不同版本的 SDK,它们可能相互冲突(版本 Z 是否覆盖/卸载版本 Y?)

这可能是避免此问题的解决方案:

如何从命令行安装所需的 MS 构建工具?(我不想使用任何 IDE,我想编写一切脚本)

如果可能的话,我会一劳永逸地为每个项目创建一个build.bat 文件,类似于:

msbuildget --package=VC14 --installdir=c:\buildtools\vc14     # automatically download and install
C:\buildtools\vc14\bin\msbuild.exe myproject.sln

msbuildget --package=.NET-35 --installdir=c:\buildtools\net35   
C:\buildtools\net35\bin\msbuild.exe myproject.sln

怎么做?

使用这种方法,即使你打开一个 6 年的旧项目,你也应该能够构建它。

【问题讨论】:

【参考方案1】:

如何自动化(从命令行)安装 Visual Studio Build Tools 构建环境,适用于 C++ 版本 X、.NET C# Z版本等

首先,您应该注意,所有的工作负载或包都需要安装并且它们将被集成到构建工具中,您需要的是它们的工作负载组件ID。

您可以参考this document获取buildtool的相关Component ID。

此外,this document 还列出了命令行安装说明。而且顺序和构建工具一样。

建议

你可以试试下面的脚本:

// This is for desktop development and also add the net framwork 3.5
vs_buildtool_xxx.exe --add Microsoft.VisualStudio.Workload.ManagedDesktopBuildTools^ 
                     --add Microsoft.Net.Component.3.5.DeveloperTools^ 
                     --add Microsoft.Net.Component.4.5.2.TargetingPack^
                     --installPath C:\BuildTools

C:\BuildTools\MSBuild\Current\Bin\MSBuild.exe myproject.sln

您还可以通过带有相关组件 ID 的 commamd -add 添加更多工作负载或包。

如果你想构建c++项目,可以试试下面的例子:

vs_buildtool_xxx.exe --add Microsoft.VisualStudio.Workload.VCTools^ 
                     --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64^ 
                     --add Microsoft.VisualStudio.Component.VC.140^
                     --installPath C:\BuildTools

C:\BuildTools\MSBuild\Current\Bin\MSBuild.exe myproject.sln

Microsoft.VisualStudio.Component.VC.140 表示 VS2015 的 C++ 构建工具。


重要提示:使用命令行与 vs_installer UI 完全不同。在 vs_installer UI 中点击 c++ 构建工具,可以看到它会自动安装相关组件。

这些组件在Microsoft.VisualStudio.Workload.VCTools workload 下列出,您可以选择是否安装它们。

但是,并不是指定工作负载会安装所有这些。

当你使用命令行时,它不会自动安装任何相关组件,所以你应该手动一一添加

对于 c++ 项目,您可以使用以下命令来安装它:

vs_buildtool.exe --add Microsoft.VisualStudio.Workload.MSBuildTools^ 
                 --add Microsoft.VisualStudio.Workload.VCTools^ 
                 --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64^ 
                 --add Microsoft.VisualStudio.Component.Windows10SDK.18362^ 
                 --add Microsoft.VisualStudio.Component.VC.CMake.Project^ 
                 --add Microsoft.VisualStudio.Component.TestTools.BuildTools^ 
                 --add Microsoft.VisualStudio.Component.VC.ASAN^ 
                 --add Microsoft.VisualStudio.Component.VC.140

【讨论】:

谢谢!下次我必须重新安装 MSVS 时,我会重试。不知什么原因,我成功了vs_buildtools.exe --add Microsoft.VisualStudio.Workload.MSBuildTools --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Workload.ManagedDesktopBuildTools,但它最终只安装了 一句话,命令行不会安装整个相关的c++工作负载,你应该一个一个添加。 其实这些都是属于Microsoft.VisualStudio.Workload.VCTools的组件。您可以选择是否安装它们。但是,并不是指定工作负载将安装所有这些。并且通过命令行,他们不会安装它们。所以你需要指定它们 这确实可能是我的问题的根源@PerryQianMSFT。我认为从命令行执行--add Microsoft.VisualStudio.Workload.VCTools 会自动安装"Components included by this workload" 中列出的所有包。这是错的吗?如果是这样,标题“此工作负载包含的组件”具有误导性……也许您可以在答案中添加有关此内容的注释吗?它可以为未来的读者节省时间! 当然。这真的有点烦人,不够方便。命令行方法本身很乏味。因此,如果您仍然想要此功能,我建议您可以在我们的 User Voice Forum 上提出功能请求。

以上是关于如何自动化(从命令行)安装 Visual Studio Build Tools 构建环境,适用于 C++、.NET、C# 等的主要内容,如果未能解决你的问题,请参考以下文章

如何将命令行代码生成器添加到 Visual Studio?

c#Visual Studio 2015 - 如何创建卸载其他应用程序的安装程序

从 MSI 安装程序的命令行覆盖“文本框”对话框字段(Visual Studio 2010 Web 设置)

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

如何从 Visual Studio 命令提示符以外的命令行运行 regasm.exe?

如何从 OSX 的命令行打开 Visual Studio Code?