如何自动化(从命令行)安装 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# 等的主要内容,如果未能解决你的问题,请参考以下文章
c#Visual Studio 2015 - 如何创建卸载其他应用程序的安装程序
从 MSI 安装程序的命令行覆盖“文本框”对话框字段(Visual Studio 2010 Web 设置)