【发布时间】: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。那时你必须使用非 Unicodestd::wstring或wchar类型,而今天 C++ 有诚实的 Unicode 类型和文字,例如std::u16string和char16_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