Beispiel #1
0
        private Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
        {
            var assembly = AssemblyResolve?.Invoke(sender, args);

            if (assembly != null)
            {
                return(assembly);
            }
            if (_currentPath == null)
            {
                return(null);
            }

            try
            {
                AssemblyName name         = new AssemblyName(args.Name);
                string       assemblyPath = _currentPath + "\\" + name.Name + ".dll";
                return(Assembly.LoadFile(assemblyPath));
            }
            catch (Exception)
            {
                try
                {
                    AssemblyName name         = new AssemblyName(args.Name);
                    string       assemblyPath = _currentPath + "\\" + name.Name + ".exe";
                    return(Assembly.LoadFile(assemblyPath));
                }
                catch (Exception)
                {
                    return(Assembly.LoadFile(args.Name + ".dll"));
                }
            }
        }
        static System.Reflection.Assembly CurrentDomainReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args)
        {
            lock (_syncObj)
            {
                try
                {
                    // This event can be invoked from multiple threads so there is a possibility that the assembly
                    // has already been loaded by another thread by the time we get here.  Load the assembly to get
                    // the framework reference for it and only add it to the load list it its not already on the list.
                    NetAssembly netAssembly = NetAssembly.ReflectionOnlyLoad(args.Name);

                    if (_assemblyList.ContainsKey(netAssembly))
                    {
                        return(netAssembly);
                    }

                    _assemblyList.Add(netAssembly, null);
                    _assemblyListChanged = true;

                    return(netAssembly);
                }
                catch (Exception)
                {
                    if (AssemblyResolve != null)
                    {
                        foreach (AssemblyResolveEvent eventHandler in AssemblyResolve.GetInvocationList())
                        {
                            try
                            {
                                FileInfo fileInfo = eventHandler.Invoke(sender, args);
                                if (fileInfo != null)
                                {
                                    NetAssembly netAssembly = NetAssembly.ReflectionOnlyLoadFrom(fileInfo.FullName);
                                    _assemblyList.Add(netAssembly, null);
                                    _assemblyListChanged = true;

                                    return(netAssembly);
                                }
                            }
                            catch (Exception)
                            {
                            }
                        }
                    }

                    throw;
                }
            }
        }
Beispiel #3
0
        static TypeLoader()
        {
            Resolver         = new DefaultAssemblyResolver();
            ReaderParameters = new ReaderParameters {
                AssemblyResolver = Resolver
            };

            Resolver.ResolveFailure += (sender, reference) =>
            {
                if (Utility.TryParseAssemblyName(reference.FullName, out var name) &&
                    (Utility.TryResolveDllAssembly(name, Paths.BepInExAssemblyDirectory, ReaderParameters, out var assembly) ||
                     Utility.TryResolveDllAssembly(name, Paths.PluginPath, ReaderParameters, out assembly) ||
                     Utility.TryResolveDllAssembly(name, Paths.ManagedPath, ReaderParameters, out assembly)))
                {
                    return(assembly);
                }

                return(AssemblyResolve?.Invoke(sender, reference));
            };
        }
Beispiel #4
0
        public static AssemblyDefinition CecilResolveOnFailure(object sender, AssemblyNameReference reference)
        {
            if (!Utility.TryParseAssemblyName(reference.FullName, out var name))
            {
                return(null);
            }

            if (Utility.TryResolveDllAssembly(name, Paths.BepInExAssemblyDirectory, ReaderParameters, out var assembly) ||
                Utility.TryResolveDllAssembly(name, Paths.PluginPath, ReaderParameters, out assembly))
            {
                return(assembly);
            }

            foreach (var dir in SearchDirectories)
            {
                if (Utility.TryResolveDllAssembly(name, dir, ReaderParameters, out assembly))
                {
                    return(assembly);
                }
            }

            return(AssemblyResolve?.Invoke(sender, reference));
        }
Beispiel #5
0
 internal static Assembly?DoAssemblyResolve(string name)
 {
     return(AssemblyResolve?.Invoke(null, new ResolveEventArgs(name)));
 }
Beispiel #6
0
        public static void Initialize(string[] args, ConsoleArgsParsedDelegate parseErrorHandler = null)
        {
            AssemblyResolve.Monitor(() =>
            {
                ILogger logger = Logger;
                if (logger == null)
                {
                    logger = new ConsoleLogger {
                        AddDetails = false
                    };
                    logger.StartLoggingThread();
                }
                return(logger);
            });

            if (parseErrorHandler == null)
            {
                parseErrorHandler = (a) =>
                {
                    throw new ArgumentException(a.Message);
                };
            }

            ArgsParsedError += parseErrorHandler;

            AddValidArgument("i", true, description: "Run interactively");
            AddValidArgument("?", true, description: "Show usage");
            AddValidArgument("t", true, description: "Run all unit tests");
            AddValidArgument("it", true, description: "Run all integration tests");

            ParseArgs(args);

            if (Arguments.Contains("?"))
            {
                Usage(Assembly.GetEntryAssembly());
                Exit();
            }
            else if (Arguments.Contains("i"))
            {
                Interactive();
                return;
            }
            else if (Arguments.Contains("t"))
            {
                RunAllUnitTests(Assembly.GetEntryAssembly());
                return;
            }
            else if (Arguments.Contains("it"))
            {
                IntegrationTestRunner.RunIntegrationTests(Assembly.GetEntryAssembly());
                return;
            }
            else
            {
                if (DefaultMethod != null)
                {
                    Expect.IsTrue(DefaultMethod.IsStatic, "DefaultMethod must be static.");
                    if (DefaultMethod.GetParameters().Length > 0)
                    {
                        DefaultMethod.Invoke(null, new object[] { Arguments });
                    }
                    else
                    {
                        DefaultMethod.Invoke(null, null);
                    }
                    return;
                }
            }
        }
 public WSSurtimientoEktCom()
 {
     AssemblyResolve.InitResolveEvent();
 }
 public WSSistemasInfProducto()
 {
     AssemblyResolve.InitResolveEvent();
 }