# Multi-Platform 跨平台
# Mono
把c#转成IL(intermediatelanguage)中间语言,再在各平台上建上专属Mono VM(虚拟机),在VM上面运行IL即可以实现跨平台。 C#为静态语言,IL为动态语言。 难点: 实现各个平台的VM比较复杂,VM官方并没有实现太多。
# IL2CPP
把C#直接转为各个平台原生C++执行,例如安卓使用ndk编译。这其中为了保证c#的一些原生特性,为此也加个一个VM,但是功能比较少,比如实现c#的GC功能等。
使用动态特性
可以使用link.xml文件来做黑名单:
<linker>
<assembly fullname="System.Web.Services">
<type fullname="System.Web.Services.Protocols.SoapTypeStubInfo" preserve="all"/>
</assembly>
<assembly fullname="System">
<type fullname="System.Net.Configuration.WebRequestModuleHandler" preserve="all"/>
<type fullname="System.Net.HttpRequestCreator" preserve="all"/>
<type fullname="System.Net.FileWebRequestCreator" preserve="all"/>
</assembly>
<assembly fullname="mscorlib">
<type fullname="System.AppDomain" preserve="fields"/>
<type fullname="System.InvalidOperationException" preserve="fields">
<method signature="System.Void .ctor()"/>
</type>
<type fullname="System.Object" preserve="nothing">
<method name="Finalize"/>
</type>
</assembly>
</linker>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
参考: file:///C:/Program%20Files/Unity/Editor/Data/Documentation/en/Manual/IL2CPP-BytecodeStripping.html (opens new window) https://zhuanlan.zhihu.com/p/19972689 (opens new window)
扩展:.net 的跨平台 https://www.cnblogs.com/artech/p/how-to-cross-platform-03.html (opens new window)