private static GenerateBlackListTypeXML ( |
||
w | ||
types | IList |
|
baseTypes | List |
|
return | void |
public static string GenerateBlackList(string librariesFolder, RuntimeClassRegistry usedClasses, string[] allAssemblies) { string text = "tmplink.xml"; usedClasses.SynchronizeClasses(); using (TextWriter textWriter = new StreamWriter(Path.Combine(librariesFolder, text))) { textWriter.WriteLine("<linker>"); textWriter.WriteLine("<assembly fullname=\"UnityEngine\">"); foreach (string current in usedClasses.GetAllManagedClassesAsString()) { textWriter.WriteLine(string.Format("<type fullname=\"UnityEngine.{0}\" preserve=\"{1}\"/>", current, usedClasses.GetRetentionLevel(current))); } textWriter.WriteLine("</assembly>"); DefaultAssemblyResolver defaultAssemblyResolver = new DefaultAssemblyResolver(); defaultAssemblyResolver.AddSearchDirectory(librariesFolder); for (int i = 0; i < allAssemblies.Length; i++) { string path = allAssemblies[i]; AssemblyDefinition assemblyDefinition = defaultAssemblyResolver.Resolve(Path.GetFileNameWithoutExtension(path), new ReaderParameters { AssemblyResolver = defaultAssemblyResolver }); textWriter.WriteLine("<assembly fullname=\"{0}\">", assemblyDefinition.Name.Name); MonoAssemblyStripping.GenerateBlackListTypeXML(textWriter, assemblyDefinition.MainModule.Types, usedClasses.GetAllManagedBaseClassesAsString()); textWriter.WriteLine("</assembly>"); } textWriter.WriteLine("</linker>"); } return(text); }
public static string GenerateBlackList(string librariesFolder, RuntimeClassRegistry usedClasses, string[] allAssemblies) { string path2 = "tmplink.xml"; usedClasses.SynchronizeClasses(); using (TextWriter w = (TextWriter) new StreamWriter(Path.Combine(librariesFolder, path2))) { w.WriteLine("<linker>"); w.WriteLine("<assembly fullname=\"UnityEngine\">"); using (List <string> .Enumerator enumerator = usedClasses.GetAllManagedClassesAsString().GetEnumerator()) { while (enumerator.MoveNext()) { string current = enumerator.Current; w.WriteLine(string.Format("<type fullname=\"UnityEngine.{0}\" preserve=\"{1}\"/>", (object)current, (object)usedClasses.GetRetentionLevel(current))); } } w.WriteLine("</assembly>"); DefaultAssemblyResolver assemblyResolver1 = new DefaultAssemblyResolver(); ((BaseAssemblyResolver)assemblyResolver1).AddSearchDirectory(librariesFolder); foreach (string allAssembly in allAssemblies) { DefaultAssemblyResolver assemblyResolver2 = assemblyResolver1; string withoutExtension = Path.GetFileNameWithoutExtension(allAssembly); ReaderParameters readerParameters1 = new ReaderParameters(); readerParameters1.set_AssemblyResolver((IAssemblyResolver)assemblyResolver1); ReaderParameters readerParameters2 = readerParameters1; AssemblyDefinition assemblyDefinition = ((BaseAssemblyResolver)assemblyResolver2).Resolve(withoutExtension, readerParameters2); w.WriteLine("<assembly fullname=\"{0}\">", (object)((AssemblyNameReference)assemblyDefinition.get_Name()).get_Name()); if (((AssemblyNameReference)assemblyDefinition.get_Name()).get_Name().StartsWith("UnityEngine.")) { using (List <string> .Enumerator enumerator = usedClasses.GetAllManagedClassesAsString().GetEnumerator()) { while (enumerator.MoveNext()) { string current = enumerator.Current; w.WriteLine(string.Format("<type fullname=\"UnityEngine.{0}\" preserve=\"{1}\"/>", (object)current, (object)usedClasses.GetRetentionLevel(current))); } } } MonoAssemblyStripping.GenerateBlackListTypeXML(w, (IList <TypeDefinition>)assemblyDefinition.get_MainModule().get_Types(), usedClasses.GetAllManagedBaseClassesAsString()); w.WriteLine("</assembly>"); } w.WriteLine("</linker>"); } return(path2); }
private static void GenerateBlackListTypeXML(TextWriter w, IList <TypeDefinition> types, List <string> baseTypes) { if (types == null) { return; } foreach (TypeDefinition current in types) { if (current != null) { foreach (string current2 in baseTypes) { if (MonoAssemblyStripping.DoesTypeEnheritFrom(current, current2)) { w.WriteLine("<type fullname=\"{0}\" preserve=\"all\"/>", current.FullName); break; } } MonoAssemblyStripping.GenerateBlackListTypeXML(w, current.NestedTypes, baseTypes); } } }