C#利用预处理指令进行条件编译

Unity引擎使用Mono虚拟机作为它的脚本处理环境,因此大部分使用C#编写的程序可以直接移植到Unity中,使用Unity .net Class Libraries编程框架对它进行编译,就可直接在Unity中使用。
但有Mono对C#的编译执行与微软并不是完全一样,例如在调用本地语言时,VS编译器需要为方法添加特性标签[DllImport("Win32Project1.dll")]来寻找寻找本地dll文件Win32Project1.dll,而Mono则需要添加特性[DllImport("Win32Project1")],根据操作系统不同寻找Win32Project1.dll或libWin32Project1.dylib或.so文件。
对于这种情况,我们并不需要为VS和MONO各准备一套代码,.NET为用户提供了一种预处理指令,用法类似于C/C++的宏定义,但.NET预处理指令只能提供简单的标签定义,以进行条件编译。
如上述例子,我们只需要在代码中插入

#if MS_BUILD
        [DllImport("Win32Project1.dll")]
#else
        [DllImport("Win32Project1")]
#endif

并在VS中打开C#项目->属性->Build,并在Conditional compilation symbols加入MS_BUILD标签,便可实现条件编译

你可能感兴趣的:(C#利用预处理指令进行条件编译)