在x86系统上编译C#.NET x64二进制文件

本文关键字:NET x64 二进制文件 编译 x86 系统 | 更新日期: 2023-09-27 18:21:04

我有一个C#项目,其中包含对ScintillaNET的引用。不幸的是,ScintillaNET喜欢检测机器的体系结构,并根据运行的体系结构加载本地DLL。这意味着我的项目必须预先编译成x86和x64版本(由于上述检测,我无法使用任何CPU)。

问题是我的构建服务器只是x86。有没有一种方法可以在x86计算机上以x64模式编译.NET程序集?据我所知,切换只是迫使计算机加载所需体系结构的程序集,并且在编译时实际上不会输出任何依赖于体系结构的代码,然而,当在构建服务器上根据Mono 2.10.6进行编译时,我会出现以下错误:

"错误CS0016:无法写入文件"ScintillaNet",原因:AMD64"

我不能使用CorFlags.exe来更改PE头,因为这是一个基于Linux的构建服务器。有办法做到这一点吗?

在x86系统上编译C#.NET x64二进制文件

我最终通过将项目切换回Any CPU来解决这个问题。由于无论.NET设置如何,Scintilla都只能在本地体系结构中工作,所以我不得不在我的机器上以64位的方式运行它。最初,我打算强制将体系结构设置为32位,以获得"编辑并继续",这导致了Scintilla检测体系结构的混乱。

事实上,Scintilla会强制自己使用本机体系结构,但如果您在AnyCPU下构建和运行.NET应用程序,那么它将正常工作。此外,由于我不能在32位模式下运行带有Scintilla的.NET应用程序(用于编辑和继续工作),所以在我的机器上强制使用64位模式也没有任何好处。