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

时间:2012-01-23 12:27:22

标签: c# .net mono cross-compiling

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

问题是我的构建服务器只是x86。有没有办法在x86机器上以x64模式编译.NET程序集?据我所知,切换只是强制计算机加载所需架构的程序集,并且实际上并不在编译时输出任何与架构相关的代码,但是,在构建服务器上的Mono 2.10.6下进行编译时得到如下错误:

“错误CS0016:无法写入文件`ScintillaNet',原因:AMD64”

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

1 个答案:

答案 0 :(得分:2)

我最终通过将项目切换回任何CPU来解决此问题。由于Scintilla只能在原生架构中工作而不管.NET设置如何,因此我必须在我的机器上以64位运行它。最初我曾打算将架构强制为32位以获得编辑和继续,这导致混淆了Scintilla如何检测架构。

实际上,Scintilla会强制自己使用本机架构,但如果你在Any CPU下构建和运行,那么.NET应用程序就能正常运行。另外,由于我无法在32位模式下运行带有Scintilla的.NET应用程序(编辑并继续工作),我在我的机器上强制使用64位模式也没有任何好处。