2012-01-23 69 views
13

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

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

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

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

+5

没有意义,位数由主启动程序集(EXE)确定,而不是像ScintillaNET这样的库。使用AnyCPU。 –

+4

听起来像他的项目是主要的启动程序集。如果它在64位机器上以x86启动,Scintilla会自行检测,找到x64,尝试将本机x64 dll加载到x86应用程序并失败。真的,它是Scintilla中的一个错误,它没有检测到当前进程的体系结构,而是机器。 – antiduh

+0

根据mono文档,'--aot'选项不会将平台作为参数。目前似乎不可能。 –

回答

2

我最终通过将项目切换回任何CPU来解决此问题。由于Scintilla只能在本机体系结构中工作而不管.NET设置如何,所以我必须在我的机器上以64位运行它。最初我打算强制架构为32位以获得编辑并继续,这导致混淆了Scintilla检测架构的方式。在现实中,Scintilla会强制自己到本地架构,但是如果你在Any CPU下构建并运行,.NET应用程序将正常工作。另外,由于我无法在32位模式下运行带有Scintilla的.NET应用程序(对于编辑并继续工作),我无法在我的机器上强制使用64位模式。

相关问题