// @return value: whether new or updated addins found. ResolutionResult ParseAndUpdateAddin(ScanFilePack filePack) { var scanFilePackResult = new ScanFilePackResult(); scanFilePackResult.AddScanFilePack(filePack); var proxy = new AddinResolverProxy(); return(proxy.Resolve(_addinFramework.NameConvention, _addinFramework.FileSettings, _addinFramework.AssemblyLoadPolicy, _addinStorage, _addinRelationManager, scanFilePackResult)); }
internal abstract bool TryParse(/*ILogger logger, */ ScanFilePack scanFilePack, out AddinManifest addinManifest);
internal override bool TryParse(/*ILogger logger, */ ScanFilePack scanFilePack, out AddinManifest addinManifest) { addinManifest = null; if (!ShouldParse(scanFilePack.ManifestFile)) { return(false); } var header = ReadHeader(); var extensionSchema = ReadExtensionSchema(); var extensions = ReadExtensions(); //if (extensionSchema == null && extensions == null) // return false; var manifest = new XmlAddinManifest { AddinHeader = header, ExtensionSchema = extensionSchema, Extensions = extensions, AddinActivator = ReadAddinActivator(), }; var addinDir = Path.Combine(scanFilePack.AddinProbingDirectory, scanFilePack.AddinDirectory); var manifestFilePath = IoHelper.GetRelativePath(scanFilePack.ManifestFile, addinDir); var fi = IoHelper.GetFileInfo(scanFilePack.ManifestFile); manifest.ManifestFile = new ManifestFileXml { Directory = addinDir, FilePath = manifestFilePath, LastWriteTime = fi.LastWriteTime, FileLength = fi.Length, FileHash = IoHelper.GetFileHash(scanFilePack.ManifestFile), }; // if the manifest file does not contains a Files node, then use the ScanFilePack List <AssemblyFileXml> assemblyFiles; List <DataFileXml> dataFiles; if (!TryReadFiles(addinDir, out assemblyFiles, out dataFiles)) { if (scanFilePack.AssemblyFiles != null) { assemblyFiles = new List <AssemblyFileXml>(); foreach (var assemblyFile in scanFilePack.AssemblyFiles) { var asmFile = new AssemblyFileXml { FilePath = IoHelper.GetRelativePath(assemblyFile, addinDir), LastWriteTime = IoHelper.GetLastWriteTime(assemblyFile) }; assemblyFiles.Add(asmFile); } } if (scanFilePack.DataFiles != null) { dataFiles = new List <DataFileXml>(); foreach (var dataFile in scanFilePack.DataFiles) { var dtFile = new DataFileXml { FilePath = IoHelper.GetRelativePath(dataFile, addinDir) }; dataFiles.Add(dtFile); } } } manifest.AssemblyFiles = assemblyFiles; manifest.DataFiles = dataFiles; addinManifest = manifest; return(true); }