Configuration.PackageReference[] GetWorkflowPackageDependencies(string[] fileNames) { var assemblies = new HashSet <Assembly>(); foreach (var path in fileNames) { var metadata = WorkflowBuilder.ReadMetadata(path); using (var markupReader = new StringReader(metadata.WorkflowMarkup)) using (var reader = XmlReader.Create(markupReader)) { reader.ReadToFollowing(WorkflowElementName); using (var workflowReader = reader.ReadSubtree()) { while (workflowReader.ReadToFollowing(ExpressionElementName)) { if (!workflowReader.HasAttributes) { continue; } if (workflowReader.GetAttribute(TypeAttributeName, XsiAttributeValue) == IncludeWorkflowTypeName) { var includePath = workflowReader.GetAttribute(PathAttributeName); var separatorIndex = includePath != null?includePath.IndexOf(AssemblySeparator) : -1; if (separatorIndex >= 0 && !Path.IsPathRooted(includePath)) { var assemblyName = includePath.Split(new[] { AssemblySeparator }, 2)[0]; if (!string.IsNullOrEmpty(assemblyName)) { var assembly = Assembly.Load(assemblyName); assemblies.Add(assembly); } } } } } } assemblies.Add(typeof(WorkflowBuilder).Assembly); assemblies.AddRange(metadata.GetExtensionTypes().Select(type => type.Assembly)); var layoutPath = Path.ChangeExtension(path, Path.GetExtension(path) + Constants.LayoutExtension); if (File.Exists(layoutPath)) { var visualizerMap = new Lazy <IDictionary <string, Type> >(() => TypeVisualizerLoader.GetVisualizerTypes(packageConfiguration) .Select(descriptor => descriptor.VisualizerTypeName).Distinct() .Select(typeName => Type.GetType(typeName, false)) .Where(type => type != null) .ToDictionary(type => type.FullName) .Wait()); using (var reader = XmlReader.Create(layoutPath)) { var layout = (VisualizerLayout)VisualizerLayout.Serializer.Deserialize(reader); foreach (var settings in GetVisualizerSettings(layout)) { var typeName = settings.VisualizerTypeName; if (typeName == null) { continue; } if (visualizerMap.Value.TryGetValue(typeName, out Type type)) { assemblies.Add(type.Assembly); } } } } } var packageMap = packageConfiguration.GetPackageReferenceMap(); var dependencies = packageConfiguration.GetAssemblyPackageReferences( assemblies.Select(assembly => assembly.GetName().Name), packageMap); if (File.Exists(scriptEnvironment.ProjectFileName)) { dependencies = dependencies.Concat( from id in scriptEnvironment.GetPackageReferences() where packageConfiguration.Packages.Contains(id) select packageConfiguration.Packages[id]); } return(dependencies.ToArray()); }