Пример #1
0
        /// <summary>
        /// Called when the resolution of an assembly fails, gives us the opportunity to feed the required asssembly
        /// to the program
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public static Assembly AssemblyResolver(object sender, ResolveEventArgs args)
        {
            try {
                var requestedAssembly = new AssemblyName(args.Name);

                // new library request!
                if (!requestedAssembly.Name.Contains("."))
                {
                    var pathToLib = Path.Combine(Config.FolderLibrary, requestedAssembly.Name + ".dll");

                    // replace the library if outdated or if it doesn't exist
                    if (string.IsNullOrEmpty(pathToLib) || !File.Exists(pathToLib) || requestedAssembly.Version.ToString().IsHigherVersionThan(GetAssemblyVersionFromPath(pathToLib)))
                    {
                        var lib = (byte[])Resources.ResourceManager.GetObject(requestedAssembly.Name);
                        if (lib != null)
                        {
                            if (Npp.NumberOfNppStarted <= 1)
                            {
                                Utils.FileWriteAllBytes(pathToLib, lib);
                            }
                        }
                        else
                        {
                            // the library doesn't exist in 3P!
                            return(null);
                        }
                    }

                    return(Assembly.LoadFrom(pathToLib));
                }
            } catch (Exception e) {
                ErrorHandler.ShowErrors(e, "Error in LibLoader");
            }
            return(null);
        }