【发布时间】:2012-02-16 19:11:26
【问题描述】:
我有一个 C# 项目,其中包含对 ScintillaNET 的引用。不幸的是,ScintillaNET 喜欢检测机器的体系结构并根据运行的体系结构加载本机 DLL。这意味着我的项目必须预编译成x86和x64版本(由于上述检测,我不能使用Any CPU)。
问题是我的构建服务器仅支持 x86。有没有办法可以在 x86 机器上以 x64 模式编译 .NET 程序集?据我所知,切换只是强制计算机为所需架构加载程序集,并且在编译时实际上并不输出任何与架构相关的代码,但是,当在构建服务器上的 Mono 2.10.6 下编译时,我得到错误,例如:
“错误 CS0016:无法写入文件 `ScintillaNet',原因:AMD64”
我不能使用 CorFlags.exe 来更改 PE 标头,因为这是基于 Linux 的构建服务器。有没有办法做到这一点?
【问题讨论】:
-
毫无意义,位数由主启动程序集(EXE)决定,而不是由像 ScintillaNET 这样的库决定。使用 AnyCPU。
-
听起来他的项目是主要的启动程序集。如果它在 x64 的机器上以 x86 启动,则 Scintilla 将进行自己的检测,找到 x64,尝试将本机 x64 dll 加载到 x86 应用程序中并失败。确实,这是 Scintilla 中的一个错误,它没有检测到当前进程的体系结构,而不是机器。
-
根据 mono 文档,
--aot选项不将平台作为参数。目前看来是不可能的。
标签: c# .net mono cross-compiling