在Windows 8.1上构建的.NET 4.0程序集不适用于较低的Windows版本

e_C*_*hiP 5 .net c# c++ marshalling windows-8.1

我们有一个项目,包括使用Marshall的c ++核心库和.NET包装器(2.0和4.0).构建机器具有Windows 8.1操作系统.

C++核心和.NET 2.0包装器是使用MSVC 2005构建的,并且在具有较低Windows版本的其他机器上运行良好.

.NET 4.0包装器使用Microsoft SDK 7.1构建.库在构建​​机器上运行良好,但在其他机器(安装了.NET 4.0)上崩溃,并出现以下错误:

Exception: System.MissingMethodException: Method not found: 'IntPtr System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(!!0)'.
Run Code Online (Sandbox Code Playgroud)

似乎包装器是使用更高版本的.NET构建的,我不知道如何解决这个问题.据我所知,虽然它们不向后兼容,但在构建时无法强制使用特定版本的.NET 4.x.

e_C*_*hiP 1

我设法解决了这个问题。不知何故,MSbuild 使用了最好的可用工具集,尽管环境配置为 Windows SDK 7.1

在调查问题时我终于找到了这篇文章。因此,为了构建项目,我必须为 SDK 配置环境并告诉 MSbuild 使用此 SDK 中的工具集。

所以解决方案是使用 flag 调用 MSbuild /p:PlatformToolset=Windows7.1SDK

感谢所有提供帮助的人!