/// <summary> /// Try loading package into Library (including all node libraries and custom nodes) /// and add to LocalPackages. /// </summary> /// <param name="package"></param> internal void TryLoadPackageIntoLibrary(Package package) { this.Add(package); // Prevent duplicate loads if (package.Loaded) { return; } try { // load node libraries foreach (var assem in package.EnumerateAssembliesInBinDirectory()) { if (assem.IsNodeLibrary) { try { OnRequestLoadNodeLibrary(assem.Assembly); } catch (LibraryLoadFailedException ex) { Log(ex.GetType() + ": " + ex.Message); } } } // load custom nodes var customNodes = OnRequestLoadCustomNodeDirectory(package.CustomNodeDirectory); package.LoadedCustomNodes.AddRange(customNodes); package.EnumerateAdditionalFiles(); // If the additional files contained an extension manifest, then request it be loaded. var extensionManifests = package.AdditionalFiles.Where( file => file.Model.Name.Contains("ExtensionDefinition.xml") && !(file.Model.Name.Contains("ViewExtensionDefinition.xml"))).ToList(); foreach (var extPath in extensionManifests) { var extension = RequestLoadExtension?.Invoke(extPath.Model.FullName); if (extension != null) { RequestAddExtension?.Invoke(extension); } this.requestedExtensions.Add(extension); } package.Loaded = true; this.PackgeLoaded?.Invoke(package); } catch (Exception e) { Log("Exception when attempting to load package " + package.Name + " from " + package.RootDirectory); Log(e.GetType() + ": " + e.Message); } }
private void requestLoadViewExtensionsForLoadedPackages(IEnumerable <Package> packages) { foreach (var package in packages) { //if package was previously loaded then additional files are already cached. if (package.Loaded) { var vieweExtensionManifests = package.AdditionalFiles.Where(file => file.Model.Name.Contains("ViewExtensionDefinition.xml")).ToList(); foreach (var extPath in vieweExtensionManifests) { var viewExtension = RequestLoadExtension?.Invoke(extPath.Model.FullName); if (viewExtension != null) { RequestAddExtension?.Invoke(viewExtension); } this.requestedExtensions.Add(viewExtension); } } } }
/// <summary> /// Try loading package into Library (including all node libraries and custom nodes) /// and add to LocalPackages. /// </summary> /// <param name="package"></param> private void TryLoadPackageIntoLibrary(Package package) { Add(package); // Prevent duplicate loads if (package.LoadState.State == PackageLoadState.StateTypes.Loaded) { return; } // Prevent loading packages that have been specifically marked as unloaded if (package.LoadState.State == PackageLoadState.StateTypes.Unloaded) { return; } List <Assembly> loadedNodeLibs = new List <Assembly>(); try { // load node libraries foreach (var assem in package.EnumerateAndLoadAssembliesInBinDirectory()) { if (assem.IsNodeLibrary) { try { OnRequestLoadNodeLibrary(assem.Assembly); loadedNodeLibs.Add(assem.Assembly); } catch (LibraryLoadFailedException ex) { Log(ex.GetType() + ": " + ex.Message); } } } // load custom nodes var packageInfo = new Graph.Workspaces.PackageInfo(package.Name, new Version(package.VersionName)); var customNodes = OnRequestLoadCustomNodeDirectory(package.CustomNodeDirectory, packageInfo); package.LoadedCustomNodes.AddRange(customNodes); package.EnumerateAdditionalFiles(); // If the additional files contained an extension manifest, then request it be loaded. var extensionManifests = package.AdditionalFiles.Where( file => file.Model.Name.Contains("ExtensionDefinition.xml") && !file.Model.Name.Contains("ViewExtensionDefinition.xml")).ToList(); foreach (var extPath in extensionManifests) { var extension = RequestLoadExtension?.Invoke(extPath.Model.FullName); if (extension != null) { RequestAddExtension?.Invoke(extension); } requestedExtensions.Add(extension); } package.SetAsLoaded(); PackgeLoaded?.Invoke(package); PackagesLoaded?.Invoke(loadedNodeLibs); PythonServices.PythonEngineManager.Instance. LoadPythonEngine(package.LoadedAssemblies.Select(x => x.Assembly)); } catch (CustomNodePackageLoadException e) { Package originalPackage = localPackages.FirstOrDefault(x => x.CustomNodeDirectory == e.InstalledPath); OnConflictingPackageLoaded(originalPackage, package); package.LoadState.SetAsError(e.Message); } catch (Exception e) { if (e is DynamoServices.AssemblyBlockedException) { var failureMessage = string.Format(Properties.Resources.PackageLoadFailureForBlockedAssembly, e.Message); DynamoServices.LoadLibraryEvents.OnLoadLibraryFailure(failureMessage, Properties.Resources.LibraryLoadFailureMessageBoxTitle); } package.LoadState.SetAsError(e.Message); Log("Exception when attempting to load package " + package.Name + " from " + package.RootDirectory); Log(e.GetType() + ": " + e.Message); } }