Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在windows 8.1上构建的.NET 4.0程序集在较低的windows版本上不起作用 我们有一个由C++核心库和.NET包装器2和4组成的项目。生成计算机具有Windows 8.1操作系统_C#_C++_.net_Marshalling_Windows 8.1 - Fatal编程技术网

C# 在windows 8.1上构建的.NET 4.0程序集在较低的windows版本上不起作用 我们有一个由C++核心库和.NET包装器2和4组成的项目。生成计算机具有Windows 8.1操作系统

C# 在windows 8.1上构建的.NET 4.0程序集在较低的windows版本上不起作用 我们有一个由C++核心库和.NET包装器2和4组成的项目。生成计算机具有Windows 8.1操作系统,c#,c++,.net,marshalling,windows-8.1,C#,C++,.net,Marshalling,Windows 8.1,C++内核和.NET2.0包装器是使用MSVC2005构建的,在其他具有较低windows版本的机器上可以完美运行 .NET 4.0包装器是使用Microsoft SDK 7.1构建的。库在生成计算机上运行正常,但在安装了.NET 4.0的其他计算机上崩溃,并出现以下错误: Exception: System.MissingMethodException: Method not found: 'IntPtr System.Runtime.InteropServices.Marshal.GetFu

C++内核和.NET2.0包装器是使用MSVC2005构建的,在其他具有较低windows版本的机器上可以完美运行

.NET 4.0包装器是使用Microsoft SDK 7.1构建的。库在生成计算机上运行正常,但在安装了.NET 4.0的其他计算机上崩溃,并出现以下错误:

Exception: System.MissingMethodException: Method not found: 'IntPtr System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(!!0)'.

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

您可以在“项目属性”窗口中指定希望应用程序使用的.NET framework版本。在应用程序选项卡下,在目标框架下拉列表下选择首选版本。您可以在上查看有关针对特定框架版本的更多信息。

我设法解决了这个问题。尽管环境配置为Windows SDK 7.1,但MSbuild还是使用了最好的Aviable工具集

在调查这个问题时,我终于发现了。所以,为了构建项目,我必须将环境配置为SDK,并告诉MSbuild使用此SDK中的工具集

因此,解决方案是使用标志/p:PlatformToolset=Windows7.1SDK调用MSbuild


感谢所有帮助过我的人

因为我不使用Visual Studio项目或MSBuild,所以我必须在C编译器的命令行中找到如何处理此问题。这并不复杂,但有一些新的概念。与csc.exe位于同一目录中的.NET程序集是实现程序集。当您要为特定的.NET版本编译时,应使用引用程序集,如下所述:

您可以在c:\program files x86\reference Assembly\\Microsoft\Framework\.NET Framework下找到引用程序集。在安装了VS.2008至VS.2013的计算机上,有3.5、4.0、4.5和4.5.1的目录。要使用它们,您需要如下命令行:

csc/target:library/noconfig/nostlib+/reference:C:\Program Files x86\reference Assembly\Microsoft\Framework\.NET Framework\v4.5\mscorlib.dll MyLibSrc.cs

/noconfig告诉C编译器忽略csc.rsp,它提供了一个要引用的默认程序集列表,这些程序集是您不想要的实现程序集

/nostlib+告诉C编译器不要使用默认的标准库


/引用告诉C编译器它可以使用路径名后面的库。这里显示的是.NET4.5的标准库:我用它构建的项目只使用标准库,所以这就是我所需要的

.NET Framework目标应独立于操作系统版本。@zneak:是。但是.NET framework 4.5.1是通过.NET framework 4.0安装的,这会导致许多非常有趣的问题,需要几天才能解决:GetFunctionPointerForDelegate的通用版本仅在.NET 4.5.1之后才存在。请确保您使用的是接受委托的代理,方法是将您的委托转换为接受委托的代理。@zneak感谢您的回复。是的,我确信已调用支持的方法。这个:这对我不起作用。我的开发机器安装了4.5.1,无论我为PlatformToolset或ToolsVersion设置了什么,我的C++/CLI代码都将使用4.5.1的通用GetFunctionPointerForDelegate。因此,正如OP的第一条评论所建议的那样,我最终不得不强制转换以委派和重新编译。