我需要在Mac上为Mono和在PC上为.NET双重编译一个类库。虽然我希望能够使用编译器指令来拆分代码,但还有一些小的修改需要进行。您有什么建议吗?
尽管运行时检查可能更可取,但使用Mono编译器预定义的__MonoCS__
常量很有用,例如:
#if __MonoCS__
// Code for Mono C# compiler.
#else
// Code for Microsoft C# compiler.
#endif
首选方法是使用运行时检测,因为这样可以在任何平台上使用相同的程序集:
using System;
class Program {
static void Main ()
{
Type t = Type.GetType ("Mono.Runtime");
if (t != null)
Console.WriteLine ("You are running with the Mono VM");
else
Console.WriteLine ("You are running something else");
}
}
嗯,你肯定可以使用
#if MONO
然后使用编译器进行编译
gmcs -define:MONO ...
(或者当然可以将其放在你的Mono构建配置中。这确实取决于你如何构建你的库。)
... 除此之外,你还想要什么?
#if __MonoCS__ using System.Deployment.Application; #endif
- 然后它就编译通过了。而如果不加,就会失败。这与逻辑上应该发生的相反,因为我是在 Mac 上使用 Mono 进行编译。 - PandaWood