Beispiel #1
0
        public static string[] FindAssembliesReferencedBy(string[] paths, string[] foldersToSearch, BuildTarget target)
        {
            List <string> list = new List <string>();
            Dictionary <string, AssemblyDefinition> cache = new Dictionary <string, AssemblyDefinition>();

            for (int i = 0; i < paths.Length; i++)
            {
                AssemblyHelper.AddReferencedAssembliesRecurse(paths[i], list, paths, foldersToSearch, cache, target);
            }
            for (int j = 0; j < paths.Length; j++)
            {
                list.Remove(paths[j]);
            }
            return(list.ToArray());
        }
        public static string[] FindAssembliesReferencedBy(string[] paths, string[] foldersToSearch, BuildTarget target)
        {
            List <string> alreadyFoundAssemblies = new List <string>();

            string[] allAssemblyPaths = paths;
            Dictionary <string, AssemblyDefinition> cache = new Dictionary <string, AssemblyDefinition>();

            for (int index = 0; index < paths.Length; ++index)
            {
                AssemblyHelper.AddReferencedAssembliesRecurse(paths[index], alreadyFoundAssemblies, allAssemblyPaths, foldersToSearch, cache, target);
            }
            for (int index = 0; index < paths.Length; ++index)
            {
                alreadyFoundAssemblies.Remove(paths[index]);
            }
            return(alreadyFoundAssemblies.ToArray());
        }
Beispiel #3
0
        private static void AddReferencedAssembliesRecurse(string assemblyPath, List <string> alreadyFoundAssemblies, string[] allAssemblyPaths, string[] foldersToSearch, Dictionary <string, AssemblyDefinition> cache, BuildTarget target)
        {
            if (AssemblyHelper.IgnoreAssembly(assemblyPath, target))
            {
                return;
            }
            AssemblyDefinition assemblyDefinitionCached = AssemblyHelper.GetAssemblyDefinitionCached(assemblyPath, cache);

            if (assemblyDefinitionCached == null)
            {
                throw new ArgumentException("Referenced Assembly " + Path.GetFileName(assemblyPath) + " could not be found!");
            }
            if (alreadyFoundAssemblies.IndexOf(assemblyPath) != -1)
            {
                return;
            }
            alreadyFoundAssemblies.Add(assemblyPath);
            IEnumerable <string> source = (from i in PluginImporter.GetImporters(target).Where(delegate(PluginImporter i)
            {
                string platformData = i.GetPlatformData(target, "CPU");
                return(!string.IsNullOrEmpty(platformData) && !string.Equals(platformData, "AnyCPU", StringComparison.InvariantCultureIgnoreCase));
            })
                                           select Path.GetFileName(i.assetPath)).Distinct <string>();

            foreach (AssemblyNameReference referencedAssembly in assemblyDefinitionCached.MainModule.AssemblyReferences)
            {
                if (!(referencedAssembly.Name == "BridgeInterface"))
                {
                    if (!(referencedAssembly.Name == "WinRTBridge"))
                    {
                        if (!(referencedAssembly.Name == "UnityEngineProxy"))
                        {
                            if (!AssemblyHelper.IgnoreAssembly(referencedAssembly.Name + ".dll", target))
                            {
                                string text = AssemblyHelper.FindAssemblyName(referencedAssembly.FullName, referencedAssembly.Name, allAssemblyPaths, foldersToSearch, cache);
                                if (text == string.Empty)
                                {
                                    bool     flag  = false;
                                    string[] array = new string[]
                                    {
                                        ".dll",
                                        ".winmd"
                                    };
                                    string extension;
                                    for (int j = 0; j < array.Length; j++)
                                    {
                                        extension = array[j];
                                        if (source.Any((string p) => string.Equals(p, referencedAssembly.Name + extension, StringComparison.InvariantCultureIgnoreCase)))
                                        {
                                            flag = true;
                                            break;
                                        }
                                    }
                                    if (!flag)
                                    {
                                        throw new ArgumentException(string.Format("The Assembly {0} is referenced by {1} ('{2}'). But the dll is not allowed to be included or could not be found.", referencedAssembly.Name, assemblyDefinitionCached.MainModule.Assembly.Name.Name, assemblyPath));
                                    }
                                }
                                else
                                {
                                    AssemblyHelper.AddReferencedAssembliesRecurse(text, alreadyFoundAssemblies, allAssemblyPaths, foldersToSearch, cache, target);
                                }
                            }
                        }
                    }
                }
            }
        }
        private static void AddReferencedAssembliesRecurse(string assemblyPath, List <string> alreadyFoundAssemblies, string[] allAssemblyPaths, string[] foldersToSearch, Dictionary <string, AssemblyDefinition> cache, BuildTarget target)
        {
            // ISSUE: object of a compiler-generated type is created
            // ISSUE: variable of a compiler-generated type
            AssemblyHelper.\u003CAddReferencedAssembliesRecurse\u003Ec__AnonStorey2D recurseCAnonStorey2D = new AssemblyHelper.\u003CAddReferencedAssembliesRecurse\u003Ec__AnonStorey2D();
            // ISSUE: reference to a compiler-generated field
            recurseCAnonStorey2D.target = target;
            // ISSUE: reference to a compiler-generated field
            if (AssemblyHelper.IgnoreAssembly(assemblyPath, recurseCAnonStorey2D.target))
            {
                return;
            }
            AssemblyDefinition definitionCached = AssemblyHelper.GetAssemblyDefinitionCached(assemblyPath, cache);

            if (definitionCached == null)
            {
                throw new ArgumentException("Referenced Assembly " + Path.GetFileName(assemblyPath) + " could not be found!");
            }
            if (alreadyFoundAssemblies.IndexOf(assemblyPath) != -1)
            {
                return;
            }
            alreadyFoundAssemblies.Add(assemblyPath);
            // ISSUE: reference to a compiler-generated field
            // ISSUE: reference to a compiler-generated method
            IEnumerable <string> source = ((IEnumerable <PluginImporter>)PluginImporter.GetImporters(recurseCAnonStorey2D.target)).Where <PluginImporter>(new Func <PluginImporter, bool>(recurseCAnonStorey2D.\u003C\u003Em__40)).Select <PluginImporter, string>((Func <PluginImporter, string>)(i => Path.GetFileName(i.assetPath))).Distinct <string>();

            // ISSUE: object of a compiler-generated type is created
            // ISSUE: variable of a compiler-generated type
            AssemblyHelper.\u003CAddReferencedAssembliesRecurse\u003Ec__AnonStorey2E recurseCAnonStorey2E = new AssemblyHelper.\u003CAddReferencedAssembliesRecurse\u003Ec__AnonStorey2E();
            using (Collection <AssemblyNameReference> .Enumerator enumerator = definitionCached.get_MainModule().get_AssemblyReferences().GetEnumerator())
            {
                // ISSUE: explicit reference operation
                while (((Collection <AssemblyNameReference> .Enumerator)@enumerator).MoveNext())
                {
                    // ISSUE: reference to a compiler-generated field
                    // ISSUE: explicit reference operation
                    recurseCAnonStorey2E.referencedAssembly = ((Collection <AssemblyNameReference> .Enumerator)@enumerator).get_Current();
                    // ISSUE: reference to a compiler-generated field
                    // ISSUE: reference to a compiler-generated field
                    // ISSUE: reference to a compiler-generated field
                    // ISSUE: reference to a compiler-generated field
                    // ISSUE: reference to a compiler-generated field
                    if (!(recurseCAnonStorey2E.referencedAssembly.get_Name() == "BridgeInterface") && !(recurseCAnonStorey2E.referencedAssembly.get_Name() == "WinRTBridge") && (!(recurseCAnonStorey2E.referencedAssembly.get_Name() == "UnityEngineProxy") && !AssemblyHelper.IgnoreAssembly(recurseCAnonStorey2E.referencedAssembly.get_Name() + ".dll", recurseCAnonStorey2D.target)))
                    {
                        // ISSUE: reference to a compiler-generated field
                        // ISSUE: reference to a compiler-generated field
                        string assemblyName = AssemblyHelper.FindAssemblyName(recurseCAnonStorey2E.referencedAssembly.get_FullName(), recurseCAnonStorey2E.referencedAssembly.get_Name(), allAssemblyPaths, foldersToSearch, cache);
                        if (assemblyName == string.Empty)
                        {
                            bool flag = false;
                            // ISSUE: object of a compiler-generated type is created
                            // ISSUE: variable of a compiler-generated type
                            AssemblyHelper.\u003CAddReferencedAssembliesRecurse\u003Ec__AnonStorey2F recurseCAnonStorey2F = new AssemblyHelper.\u003CAddReferencedAssembliesRecurse\u003Ec__AnonStorey2F();
                            // ISSUE: reference to a compiler-generated field
                            recurseCAnonStorey2F.\u003C\u003Ef__ref\u002446 = recurseCAnonStorey2E;
                            string[] strArray = new string[2]
                            {
                                ".dll",
                                ".winmd"
                            };
                            foreach (string str in strArray)
                            {
                                // ISSUE: reference to a compiler-generated field
                                recurseCAnonStorey2F.extension = str;
                                // ISSUE: reference to a compiler-generated method
                                if (source.Any <string>(new Func <string, bool>(recurseCAnonStorey2F.\u003C\u003Em__42)))
                                {
                                    flag = true;
                                    break;
                                }
                            }
                            if (!flag)
                            {
                                // ISSUE: reference to a compiler-generated field
                                throw new ArgumentException(string.Format("The Assembly {0} is referenced by {1} ('{2}'). But the dll is not allowed to be included or could not be found.", (object)recurseCAnonStorey2E.referencedAssembly.get_Name(), (object)((AssemblyNameReference)definitionCached.get_MainModule().get_Assembly().get_Name()).get_Name(), (object)assemblyPath));
                            }
                        }
                        else
                        {
                            // ISSUE: reference to a compiler-generated field
                            AssemblyHelper.AddReferencedAssembliesRecurse(assemblyName, alreadyFoundAssemblies, allAssemblyPaths, foldersToSearch, cache, recurseCAnonStorey2D.target);
                        }
                    }
                }
            }
        }