/// <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); } }
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); } }
/// <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); }
/// <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); } }
public void Load() { string path = GetFullPath("TestManifest.xml"); desc = AddinDescription.Read(path); }