为什么AppVeyor对VS2015镜像使用VS2010工具?

Why does AppVeyor use VS2010 tools for VS2015 image?

我们是一个 C++ 库。我们正在努力使用 AppVeyor 和 Visual Studio 使用 x64 构建构建图像。 Visual Studio 为 Win32 构建映像遇到同样的问题,但由于某些 [未知] 原因,它们成功完成。

我们正在尝试使用 Visual Studio 2015 构建映像(以及其他):

当我们检查命令行时,我们似乎正在使用 Visual Studio 2010 编译器 (Visual Studio 10.0 is VS2010):

我们的 AppVeyor 配置文件位于 Noloader GitHub | .appveyor.yml。也如下所示。

一切都是通过.appveyor.yml驱动的。没有影响事物的隐藏设置(或者我们不相信)。我们想要 .appveyor.yml 中的所有内容,以便人们可以克隆它和 "just work" 的东西。

项目文件位于 GitHub 中 cryptest.vcxproj and cryptlib.vcxproj. The *.vcxproj files use a hard-coded $(DefaultPlatformToolset) as suggested by @stinj。 (编辑DefaultPlatformToolset - 不再。我们完全删除了 DefaultPlatformToolsetPlatformToolset)。

项目的构建结果位于 Noloader AppVeyor | cryptopp。它是屏幕截图的来源。

为什么使用了错误的构建工具,我们该如何解决?


当我避免 $(DefaultPlatformToolset) 并对平台工具集的值进行硬编码时,它会导致另一个错误。例如,下面是 Visual Studio 2015 构建映像。当工具集版本设置为 v140 时,它会死掉,这是 VS2015 版本值。真是糊涂了。

Commit ac513c06f8c8 最终被还原,因为它破坏了比以前更糟糕的东西)。


当我们完全删除 VCXPROJ 文件中 PlatformToolsetDefaultPlatformToolset 的所有痕迹时,会导致相同的错误。以下是来自 Visual Studio 2017 构建图像。


version: 1.0.{build}
clone_depth: 3

configuration:

- Debug
- Release

platform:

- Win32
- x64

image:

- Visual Studio 2017
- Visual Studio 2015
- Visual Studio 2013

build: off   

test_script:

- cmd: >-   

    msbuild /t:Build /p:platform=%platform%;configuration=%configuration% cryptlib.vcxproj

    msbuild /t:Build /p:platform=%platform%;configuration=%configuration% cryptest.vcxproj

    msbuild /t:CopyCryptestToRoot cryptest.vcxproj

    cryptest.exe v

    cryptest.exe tv all

matrix:

  exclude:
#    - platform: x64
#      configuration: Debug
#    - platform: x64
#      configuration: Release
    - image: Visual Studio 2010
    - image: Visual Studio 2017

notifications:
    - provider: Email
      to:
        - cryptopp-build@googlegroups.com
      on_build_success: true
      on_build_failure: true

以下是我的工作方式:

  • 在两个 .vcxproj 文件中设置 ToolsVersion="$(ToolsVersion)"<PlatformToolset>$(TOOLSET)</PlatformToolset>

  • 添加环境变量 TOOLSET,值为 v140ToolsVersion,值为 14.0

要使用不同的变量实现您需要的所有组合,您可以使用 build matrix and avoid combinations you do not need with exclude configuration from the matrix

更新:矩阵样本

image:
- Visual Studio 2015
- Visual Studio 2013
platform:
- x64
- x86
environment:
  matrix:
  - TOOLSET: v140
    ToolsVersion: 14.0
  - TOOLSET: v100
    ToolsVersion: 4.0
matrix:
  exclude:
    - image: Visual Studio 2015
      TOOLSET: v100
      ToolsVersion: 4.0
    - image: Visual Studio 2013
      TOOLSET: v140
      ToolsVersion: 14.0