【问题标题】:Compiling VS2015 project with VS2010 Compiler使用 VS2010 编译器编译 VS2015 项目
【发布时间】:2016-09-14 10:03:23
【问题描述】:

好的,所以我正在使用 VS2015 并升级了旧的 VC++ 2010 项目,以便使用 VS2015 运行和编译。该项目是一个使用 CLR 的 windows 窗体项目。

我最近发现该项目现在无法在 vista 机器上运行,直到最近我才在这台机器上进行开发。我猜主要的罪魁祸首是 vista 机器上缺少 .NET 4.5。所以我决定尝试使用 VS 2010 工具集和编译器对其进行编译,看看它是否可以在这台机器上运行。

我下载并安装了所有工具链 SDK 7.1 和 7.1 更新,所以现在当我进入

project properties > platform toolset

我有多个选项可以编译 VS 2015 v140、VS 2013 v120、SDK7.1 等和 VS 2010 v100。

我遇到的问题是在尝试编译时出现以下错误。

1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(297,5): warning MSB8003: Could not find WindowsSDKDir variable from the registry.  TargetFrameworkVersion or PlatformToolset may be set to an invalid version number.


1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(62,5): error : Required file "" is missing.

我遇到的第二个问题是我在托管 String^ 和常规 std::string 之间切换。为此,我正在使用编组。选择VS2010工具集时,以下代码会报错。

#include <windows.h> 
#include <msclr/marshal.h>
#include <msclr/marshal_cppstd.h>

using namespace msclr::interop;

这显然对我希望在托管和标准之间编组字符串的部分代码产生了影响。

有人对如何解决这些问题有任何建议吗?谢谢

【问题讨论】:

  • .NET 4.5 在 Vista 上可用。它在 Windows XP 上不可用。顺便说一句,最早支持的 .NET 版本是 4.5.2。您应该尝试解决原始问题,而不是尝试使用不兼容的工具
  • 此外,C++ 本身在过去 6 年中发生了很多的变化。 std::string 是 ASCII 字符串,而 .NET 使用 Unicode。那时你必须使用非 Unicode std::wstringwchar 类型,而今天 C++ 有诚实的 Unicode 类型和文字,例如 std::u16stringchar16_t
  • 好吧,我没有意识到 Vista 支持 .NET 4.5。因此,我可以使用 2015 工具集进行编译。目标架构设置为 Win32,因为最初我认为我可能正在编译为 64 位机器并尝试在 32 位机器上运行 64 位程序。但是,该程序不起作用。尝试在 Vista 机器上运行它会导致“程序停止工作”错误对话框。
  • 事件查看器中的错误是什么?如果是bad image,那么是的,这是位问题。我认为Program stopped Working 对话框有一个详细信息按钮,但无论如何,事件日志中都会记录崩溃
  • 好的,所以它出现了未处理的异常。 System.TypeInitialisationError Source .NET Framework

标签: c++ visual-studio-2010 visual-studio-2015


【解决方案1】:

好的,所以我将继续发布我的解决方案。 无需使用 VS2010 V100 工具集。

首先,我将目标机器更新为 .NET 4.6。我认为最新的是4.6.2。

然后我为我的解决方案创建了一个设置项目,并将其命名为'Prog Setup'。我在设置项目的'Detected Dependencies'中包含了“primary output”“resource satellite DLLs”。该向导有助于进行设置。

接下来,右击Setup Project,选择'View > Launch Conditions',右击.NET Framework,选择'Properties'强> 现在检查 'version' 是否设置为与主项目相同的版本。在我的情况下是 4.5.2。

最后,右键点击设置项目并选择'Properties',现在选择'Configuration dropdown > Release',点击'Prerequisites' > 并选择 .NET 4.6、VC++ 14 Runtime Libraries (x86 / x64)、Windows Installer 4.5。

好的,现在从菜单栏'构建>配置管理器',确保在'构建'列下检查设置项目和主项目以确保两个项目都已构建。

运行构建/重新构建项目。使用标准的 VS2015 v140 工具集。

在项目解决方案文件夹中,找到以下内容

VS2015 > Projects > Project Name > Prog Setup > Release

此文件夹包含一个名为“Setup”的应用程序和我的“Prog Setup”Windows 安装程序包。

完成上述所有操作后,我将两个包复制到 U 盘,然后在目标机器上运行应用程序'Setup'

然后下载并在目标机器上安装了 VC++ 14 运行时库。在此之后,它会自动运行 Prog Setup,它安装了实际的程序软件,瞧……它现在在目标机器上运行了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 2012-07-30
    • 2018-02-14
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多