visual-studio-2017 - 如何通过 devenv.exe\com 构建具有平台配置的项目?
问题描述
我正在尝试通过 devenv.com 构建解决方案,但出现错误。我使用的命令:
set devenvCom=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.com
"%devenvCom%" "C:\...\mySolution.sln" /Build "Release|AnyCPU"
我收到一个错误:“操作无法完成”
但是如果我在没有平台配置的情况下运行它:
set devenvCom=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.com
"%devenvCom%" "C:\...\mySolution.sln" /Build "Release"
这工作正常。
但是在他们的文档中,他们说您可以使用以下格式:/Build "Release|AnyCPU"
如果使用 devenv.exe 或 devenv.com 运行命令,它们都失败了。
如何成功运行命令?
解决方案
根据https://docs.microsoft.com/en-us/visualstudio/ide/reference上的 Microsoft 文档,您在两个命令中的语法(无论有无平台)对于Visual Studio 2017 中的devenv.com都是正确的/build-devenv-exe?view=vs-2017。
我通过作为 Jenkins 作业的一部分运行的批处理文件在 VS2019 中使用 devenv.com 毫无困难地运行类似的命令。
以下说明可能有助于解决此问题:
在为文件或文件夹路径定义环境变量时,我建议使用双引号,如下所示:
set "devenvCom=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.com"
这些双引号可以更轻松地确保您没有错误地将任何尾随空格添加到环境变量值中。双引号还确保路径中的任何括号或 & 符号不会被cmd.exe shell 误解。
可以双引号/Build后面的参数,例如/Build "Release"。在指定平台时需要这些双引号,例如/Build "Release|AnyCPU",以确保竖线不会被cmd.exe shell 误解,或者当构建配置名称包含空格时。
在执行自动构建时,我推荐/Rebuild而不是/Build 。只有前者可以保证从头开始执行完整的构建。
Microsoft 文档声明“在同一行的开关和参数之间插入一个空格字符”,即在/Build参数和其后的值之间放置一个空格,例如“Release|AnyCPU”。
构建配置和平台的名称,例如“Release|AnyCPU”,预计可以在指定的解决方案文件中找到。这些解决方案构建配置名称和平台不必与项目构建配置名称和平台相对应(尽管它们应该尽可能)。
如果您只想构建单个项目,我在 VS2019 中使用以下语法已经成功:
"%devenvCom%" "C:\...\myProject.vcxproj" /Build "Release|AnyCPU" /Project "myProject"
请注意,上例中的第一个参数是项目文件,而不是解决方案文件。我认为指定的构建配置和平台是指项目而不是未指定的解决方案(注意:Visual Studio 在执行单个项目构建时如果找不到与指定项目对应的解决方案,可能会创建一个临时解决方案)。
对于单个项目构建,我之前成功地首先指定了解决方案文件,然后是/Project之后的项目文件,但是这种先前的语法在 VS2019 构建 16.11.2 中并没有始终成功 - 它可能导致devenv.exe在项目构建成功(devenv.exe由devenv.com启动)。
您的 VS2017 安装可能已损坏,或者您的扩展程序可能会干扰 VS2017。
推荐阅读
- time-complexity - 两种算法一起运行的时间复杂度?
- excel - 在这种情况下使用索引匹配的最佳方法是什么?
- javascript - JavaScript 表单验证。如果需要字段,则表单发送事件
- android-studio - 当我启动颤振项目时,出现此错误“连接到服务协议时出错:HttpException:连接在完整标头之前关闭”
- vba - 自动填充 CC 字段
- android - Anko 执行 sqlite 请求但不执行下一行
- c# - 使用 FirebaseAdmin = NullReferenceException 发送推送通知
- mysql - MySql 大于与 group by
- c# - SkiaSharp Calc 应用 3d 旋转后的新点坐标
- r - 如何将格式添加到mailR邮件正文