如何使 Visual Studio 2015 C++ 项目与 Visual Studio 2010 兼容?

2024-02-10

我的老师被学校安排使用 Visual Studio 2010,因为他们不想费心安装任何新东西。我一直在使用 Visual Studio 2015 并且非常喜欢它。然而,当她尝试运行任何代码时,都会产生一堆错误。我尝试了一种通过编辑解决方案文件使 2013/2012 项目与 2010 兼容的解决方案,但它仍然会产生错误。有解决办法吗?

以下是我尝试在 Visual Studio 2010 中运行源文件时的控制台输出:

1>------ Build started: Project: typingSalon, Configuration: Debug Win32 ------
1>Build started 4/8/2015 8:19:30 AM.
1>Project file contains ToolsVersion="14.0". This toolset is unknown or missing. You may be able to resolve this by installing the appropriate .NET Framework for this toolset. Treating the project as if it had ToolsVersion="4.0".
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(518,5): error MSB8008: Specified platform toolset (v140) is not installed or invalid. Please make sure that a supported PlatformToolset value is selected.
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.05
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

针对 Visual Studio 2017、2019 和 2022 进行了更新

如果您仅使用 Visual Studio IDE 本身(而不是命令行上的 MSBuild)进行编译,则只需进行一些更改即可实际完成此工作,并且在两个平台上都具有或多或少的完整功能。

不幸的是,C++ 项目的规则与 C#/.NET 不同,并且需要一些手动干预,而 C# 项目在项目“升级”后相当自动地进行往返。这些更改将需要手动编辑项目文件。

当通过 IDE 运行构建时,更高版本的 Visual Studio 将覆盖工具版本。只需设置ToolsVersion到 4.0,以满足 Visual Studio 2010 的要求,然后修复PlatformToolset在公共属性组中获取 Visual Studio 2015 IDE 中正确的默认操作可能会做到这一点。

设置原因PlatformToolset以便在更改构建属性时正确设置默认值,例如当您转到Debug or ReleaseIDE 中的设置并选择<inherit from parent or project defaults>默认情况下,您将获得 2015 版本,而不是 2010 版本。

C++ 项目文件与 Visual Studio 2010、2015、2017、2019 和 2022 共存的步骤:

  1. ToolsVersion 属性为 4.0
  2. 将 PlatformToolset 的通用默认值添加到 Visual Studio 2015 v140
  3. 将 PlatformToolset 的通用默认值添加到 Visual Studio 2017 的 v141
  4. 将 PlatformToolset 的通用默认值添加到 Visual Studio 2019 v142
  5. 将 PlatformToolset 的通用默认值添加到 Visual Studio 2022 v143
  6. 保存文件并重新加载项目

1.工具版本到4.0:

<?xml version="1.0" encoding="utf-8"?>
  <Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup Label="ProjectConfigurations">
      <ProjectConfiguration Include="Debug|Win32">
        <Configuration>Debug</Configuration>
        <Platform>Win32</Platform>
      ...

仅通过改变14.0 to 4.0 in Project标记为ToolsVersion它成为了

<?xml version="1.0" encoding="utf-8"?>
  <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup Label="ProjectConfigurations">
      <ProjectConfiguration Include="Debug|Win32">
        <Configuration>Debug</Configuration>
        <Platform>Win32</Platform>
      ...

2.将PlatformToolset的通用默认值添加到仅Visual Studio 2015识别的v140:

  <PropertyGroup Label="Globals">
    <ProjectGuid>{12345678-9876-ABCD-DCCA-765FE987AA1F}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <RootNamespace>myProject</RootNamespace>
    <TargetPlatformVersion>8.1</TargetPlatformVersion>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

通过仅添加新的PlatformToolset线到底部PropertyGroup它成为了:

  <PropertyGroup Label="Globals">
    <ProjectGuid>{12345678-9876-ABCD-DCCA-765FE987AA1F}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <RootNamespace>myProject</RootNamespace>
    <TargetPlatformVersion>8.1</TargetPlatformVersion>
    <PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset>
    <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset>
    <PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset>
    <PlatformToolset Condition="'$(VisualStudioVersion)' == '17.0'">v143</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

还要在 Visual Studio 2017 中加载,带有工具集的一行v141如上所示,还需要继续在所有三个之间无缝交叉加载项目。

在 Visual Studio 2019 中,带有工具集的一行v142如上所示,还需要继续在所有四个之间无缝交叉加载项目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 Visual Studio 2015 C++ 项目与 Visual Studio 2010 兼容? 的相关文章

随机推荐

  • 我可以让实时 PHP 数据显示在 jquery 对话框中吗?

    我正在尝试将两种想法结合起来 但我不确定它们是否相互兼容 想法一 让 php 脚本运行命令 例如 ping 并在 Web 浏览器中提供命令的实时结果 想法2 出现一个 jQuery 对话框 打开时运行 php 脚本并在对话框中提供实时结果
  • 如何从 Diego 上的 Cloud Foundry 提取文件

    我想检索一些应用程序的日志 我发现这个命令cf file不再可用 该插件cf download 不适用于迭戈建筑 https github com ibmjstart cf download issues 12 有没有办法通过 CLI 其他
  • 检查静态库的iOS部署目标

    我有很多静态库 比如libBlah a With file我可以检查支持的架构的工具 arm64 或 i386 有没有工具可以检查iOS Deployment Target静态库的 您可以使用otool检查库文件 通过一些实验我发现标志 l
  • 小米等智能手环官方SDK/API

    我们想要开发一个 Android 应用程序来支持 MiBand 和其他智能手环 我们希望通过 BLE 从智能手环获取心率等信息 并将其显示在移动应用程序中 我们如何从设备获取这些信息 有官方的SDK或者API吗 还有一个 huami tec
  • Hibernate/JPA 中批量插入 CollectionTable 元素

    我们使用 Hibernate 4 2 作为 JPA 2 0 实体的支持库 我们有一个如下所示的实体 Entity public class MyEntity ElementCollection MapKeyColumn name key C
  • 为什么我的交易没有升级为 DTC?

    我的机器上禁用了 DTC 据我了解 这段代码应该失败 因为它在同一事务中使用两个数据上下文 那么 它为什么有效呢 注意 我使用 NET 3 5 和 NET 4 0 尝试过此操作 using TransactionScope transact
  • Python lxml解析svg文件

    我正在尝试解析 svg 文件http kanjivg tagaini net http kanjivg tagaini net 但我无法成功提取里面的信息 Edit 1 完整文件 http www filedropper com 0f9ab
  • IBM data studio 未连接到本地 DB2 数据库

    我已经在本地 Ubuntu 12 04 机器上安装了 DB2 10 5 版本 现在我需要一个图形用户界面 我已经尝试过 squirrel sql 和 Db Visualizer Db Visualizer 为我提供了仅查看的数据库结构 而
  • 一个项目有两个 gitlab-ci 运行程序

    我曾经在github上有一个项目travis https travis ci org and an appveyor https www appveyor com 已配置集成服务 因此我能够确保我的项目在两个平台上都可以正常编译OSX an
  • 使用协程API获取实体

    最好的使用方法是什么coroutines使用 LiveData 从数据库中选择一些数据Room 这是 My Dao 课程 暂停选择 Dao interface UserDao Query SELECT from user table WHE
  • 如何使用 --split-debug-info=/<项目名称>/<目录>

    下面的命令中 如何使用 split debug info
  • C++ 对齐的未来:按值传递?

    阅读 Eigen 库文档 我注意到有些对象不能按值传递 http eigen tuxfamily org dox TopicPassingByValue html C 11 中是否有任何开发或计划开发可以安全地按值传递此类对象 另外 为什么
  • SharedPreferences 保存一个按钮,单击它后将其更改为不可见,并让另一个按钮出现

    我是新来的 我是法国人 所以也许我的英语不是很好 对此感到抱歉 我是 Android 开发的初学者 我必须创建一个应用程序来完成我的学习 我有一个名为 VoeuxActivity java 的活动编号 1 有 8 个按钮 和 8 个 Tex
  • Actionscript 3 和动态蒙版

    我有一个容器 MovieClip 用作我需要遮盖的内容区域 当我使用形状在此容器内创建蒙版时 我似乎无法与我在此处创建的其他容器的内容进行交互 例如按钮等 这就是我在代码中所做的 我省略了所有导入等 class MyContainer ex
  • C++ 中不同字符串类型的优缺点

    很抱歉在 SO 上开始另一个无法回答的问题 但我只是好奇 C 中所有不同字符串类型的优缺点 我的具体问题是 MFC 的 CStrings 和 std string 之间的问题 因为我只做 Windows 软件 但这将扩展到 C 中的任何字符
  • 使用 Swift 4 解析 JSON 数据数组

    我正在使用以下代码 仅当 JSON 数据不以 字符开头时 它才有效 它适用于以 字符开头的 JSON 数据 这里有一个类似的问题 快速解析 JSON 数组 https stackoverflow com questions 26840203
  • 如何访问mapGroupsWithState中的stateSnapshot或在流之间共享GroupState?

    通过 DStream API 可以使用以下命令访问有状态流的快照状态MapWithStateDStream stateSnapshots http spark apache org docs latest api scala index h
  • 无法远程调试 IIS - w3wp.exe 呈灰色显示

    我正在尝试使用远程调试来调试 IIS Web 服务 由于我们的域配置 我们无法更改 当通过 默认 选项进行远程调试时 我收到 访问被拒绝 的消息 我找到的唯一解决方案是切换到 VS 2008 中的远程 仅本机 无需身份验证 选项 问题是 当
  • JavaScript 中的插值

    我有这个jQuery http en wikipedia org wiki JQuery code selector html a href url text a where url and text是 JavaScript 变量 我将如何
  • 如何使 Visual Studio 2015 C++ 项目与 Visual Studio 2010 兼容?

    我的老师被学校安排使用 Visual Studio 2010 因为他们不想费心安装任何新东西 我一直在使用 Visual Studio 2015 并且非常喜欢它 然而 当她尝试运行任何代码时 都会产生一堆错误 我尝试了一种通过编辑解决方案文