private static GenerateBlackListTypeXML ( |
||
w | ||
types | IList |
|
baseTypes | List |
|
return | void |
private static void GenerateBlackListTypeXML(TextWriter w, IList<TypeDefinition> types, List<string> baseTypes)
{
if (types != null)
{
IEnumerator<TypeDefinition> enumerator = types.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
TypeDefinition current = enumerator.Current;
if (current != null)
{
foreach (string str in baseTypes)
{
if (DoesTypeEnheritFrom(current, str))
{
w.WriteLine("<type fullname=\"{0}\" preserve=\"all\"/>", current.FullName);
break;
}
}
GenerateBlackListTypeXML(w, current.NestedTypes, baseTypes);
}
}
}
finally
{
if (enumerator == null)
{
}
enumerator.Dispose();
}
}
}
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); }