Exemple #1
0
        /// <summary>
        /// Loads an add-in description
        /// </summary>
        /// <param name="progressStatus">
        /// Progress tracker.
        /// </param>
        /// <param name="file">
        /// Name of the file to load
        /// </param>
        /// <returns>
        /// An add-in description
        /// </returns>
        /// <remarks>
        /// This method loads an add-in description from a file. The file can be an XML manifest or an
        /// assembly that implements an add-in.
        /// </remarks>
        public AddinDescription GetAddinDescription(IProgressStatus progressStatus, string file)
        {
            if (currentDomain == AddinDatabase.UnknownDomain)
            {
                return(null);
            }
            string outFile = Path.GetTempFileName();

            try {
                database.ParseAddin(progressStatus, currentDomain, file, outFile, false);
            }
            catch {
                File.Delete(outFile);
                throw;
            }

            try {
                AddinDescription desc = AddinDescription.Read(outFile);
                if (desc != null)
                {
                    desc.AddinFile     = file;
                    desc.OwnerDatabase = database;
                }
                return(desc);
            }
            catch {
                // Errors are already reported using the progress status object
                return(null);
            }
            finally {
                File.Delete(outFile);
            }
        }
Exemple #2
0
        public AddinDescription ReadAddinManifestFile(string file)
        {
            AddinDescription desc = AddinDescription.Read(file);

            desc.OwnerDatabase = database;
            return(desc);
        }
 AddinDescription DescFromResource(string res)
 {
     using (Stream s = GetType().Assembly.GetManifestResourceStream(res))
     {
         return(AddinDescription.Read(s, "."));
     }
 }
        bool ScanAssembly(IProgressStatus monitor, string filePath, AddinScanResult scanResult, out AddinDescription config)
        {
            config = null;

            try {
                Assembly asm = Util.LoadAssemblyForReflection(filePath);

                // Get the config file from the resources, if there is one

                string configFile = null;
                foreach (string res in asm.GetManifestResourceNames())
                {
                    if (res.EndsWith(".addin") || res.EndsWith(".addin.xml"))
                    {
                        configFile = res;
                        break;
                    }
                }

                if (configFile != null)
                {
                    using (Stream s = asm.GetManifestResourceStream(configFile)) {
                        string asmFile = new Uri(asm.CodeBase).LocalPath;
                        config = AddinDescription.Read(s, Path.GetDirectoryName(asmFile));
                    }
                }
                else
                {
                    // On this case, only scan the assembly if it has the Addin attribute.
                    AddinAttribute att = (AddinAttribute)Attribute.GetCustomAttribute(asm, typeof(AddinAttribute), false);
                    if (att == null)
                    {
                        config = null;
                        return(true);
                    }
                    config = new AddinDescription();
                }

                config.BasePath  = Path.GetDirectoryName(filePath);
                config.AddinFile = filePath;

                string rasmFile = Path.GetFileName(filePath);
                if (!config.MainModule.Assemblies.Contains(rasmFile))
                {
                    config.MainModule.Assemblies.Add(rasmFile);
                }

                return(ScanDescription(monitor, config, asm, scanResult));
            }
            catch (Exception ex) {
                // Something went wrong while scanning the assembly. We'll ignore it for now.
                monitor.ReportError("There was an error while scanning assembly: " + filePath, ex);
                return(false);
            }
        }
Exemple #5
0
        /// <summary>
        /// Reads an XML add-in manifest
        /// </summary>
        /// <param name="file">
        /// Path to the XML file
        /// </param>
        /// <returns>
        /// An add-in description
        /// </returns>
        public AddinDescription ReadAddinManifestFile(string file)
        {
            AddinDescription desc = AddinDescription.Read(file);

            if (currentDomain != AddinDatabase.UnknownDomain)
            {
                desc.OwnerDatabase = database;
                desc.Domain        = currentDomain;
            }
            return(desc);
        }
Exemple #6
0
        /// <summary>
        /// Reads an XML add-in manifest
        /// </summary>
        /// <param name="reader">
        /// Reader that contains the XML
        /// </param>
        /// <param name="baseFile">
        /// Base path to use to discover add-in files
        /// </param>
        /// <returns>
        /// An add-in description
        /// </returns>
        public AddinDescription ReadAddinManifestFile(TextReader reader, string baseFile)
        {
            if (currentDomain == AddinDatabase.UnknownDomain)
            {
                return(null);
            }
            AddinDescription desc = AddinDescription.Read(reader, baseFile);

            desc.OwnerDatabase = database;
            desc.Domain        = currentDomain;
            return(desc);
        }
        bool ScanConfigAssemblies(IProgressStatus monitor, string filePath, AddinScanResult scanResult, out AddinDescription config)
        {
            config = null;

            try {
                string basePath = Path.GetDirectoryName(filePath);

                config           = AddinDescription.Read(filePath);
                config.BasePath  = basePath;
                config.AddinFile = filePath;

                return(ScanDescription(monitor, config, null, scanResult));
            }
            catch (Exception ex) {
                // Something went wrong while scanning the assembly. We'll ignore it for now.
                monitor.ReportError("There was an error while scanning add-in: " + filePath, ex);
                return(false);
            }
        }
Exemple #8
0
        public void Load()
        {
            string path = GetFullPath("TestManifest.xml");

            desc = AddinDescription.Read(path);
        }