internal static int LaunchWorkflowEditor( PackageConfiguration packageConfiguration, ScriptExtensions scriptEnvironment, string editorRepositoryPath, string initialFileName, float editorScale, bool start, bool debugging, Dictionary <string, string> propertyAssignments) { var elementProvider = WorkflowElementLoader.GetWorkflowElementTypes(packageConfiguration); var visualizerProvider = TypeVisualizerLoader.GetTypeVisualizerDictionary(packageConfiguration); var packageManager = CreatePackageManager(editorRepositoryPath); var updatesAvailable = Task.Factory.StartNew(() => { try { return(packageManager.SourceRepository.GetUpdates( packageManager.LocalRepository.GetPackages(), includePrerelease: false, includeAllVersions: false).Any()); } catch { return(false); } }); EnableVisualStyles(); using (var mainForm = new MainForm(elementProvider, visualizerProvider, scriptEnvironment, editorScale)) { updatesAvailable.ContinueWith(task => mainForm.UpdatesAvailable = task.Result); mainForm.FileName = initialFileName; mainForm.PropertyAssignments.AddRange(propertyAssignments); mainForm.LoadAction = start && debugging ? LoadAction.Start : start ? LoadAction.StartWithoutDebugging : LoadAction.None; Application.Run(mainForm); var editorFlags = mainForm.UpdatesAvailable ? EditorFlags.UpdatesAvailable : EditorFlags.None; if (scriptEnvironment.DebugScripts) { editorFlags |= EditorFlags.DebugScripts; } AppResult.SetResult(editorFlags); AppResult.SetResult(mainForm.FileName); return((int)mainForm.EditorResult); } }
public static ScriptExtensions CompileAssembly(PackageConfiguration configuration, string editorRepositoryPath, bool includeDebugInformation) { var path = Environment.CurrentDirectory; var configurationRoot = ConfigurationHelper.GetConfigurationRoot(configuration); var scriptProjectFile = Path.Combine(path, Path.ChangeExtension(OutputAssemblyName, ProjectExtension)); if (!File.Exists(scriptProjectFile)) { return(new ScriptExtensions(configuration, null)); } var extensionsPath = Path.Combine(path, OutputAssemblyName); if (!Directory.Exists(extensionsPath)) { return(new ScriptExtensions(configuration, null)); } var scriptFiles = Directory.GetFiles(extensionsPath, ScriptExtension, SearchOption.AllDirectories); if (scriptFiles.Length == 0) { return(new ScriptExtensions(configuration, null)); } var assemblyNames = new HashSet <string>(); var assemblyDirectory = Path.GetTempPath() + OutputAssemblyName + "." + Guid.NewGuid().ToString(); var scriptEnvironment = new ScriptExtensions(configuration, assemblyDirectory); var packageRepository = new LocalPackageRepository(editorRepositoryPath); var projectReferences = from id in scriptEnvironment.GetPackageReferences() let package = packageRepository.FindPackage(id) where package != null from assemblyReference in FindAssemblyReferences(packageRepository, package) select assemblyReference; assemblyNames.AddRange(scriptEnvironment.GetAssemblyReferences()); assemblyNames.AddRange(projectReferences); var assemblyFile = Path.Combine(assemblyDirectory, Path.ChangeExtension(OutputAssemblyName, DllExtension)); var assemblyReferences = (from fileName in assemblyNames let assemblyName = Path.GetFileNameWithoutExtension(fileName) let assemblyLocation = ConfigurationHelper.GetAssemblyLocation(configuration, assemblyName) select assemblyLocation == null ? fileName : Path.IsPathRooted(assemblyLocation) ? assemblyLocation : Path.Combine(configurationRoot, assemblyLocation)) .ToArray(); var compilerParameters = new CompilerParameters(assemblyReferences, assemblyFile); compilerParameters.GenerateExecutable = false; compilerParameters.GenerateInMemory = false; compilerParameters.IncludeDebugInformation = includeDebugInformation; if (!includeDebugInformation) { compilerParameters.CompilerOptions = "/optimize"; } using (var codeProvider = new CSharpCodeProvider()) { var results = codeProvider.CompileAssemblyFromFile(compilerParameters, scriptFiles); if (results.Errors.HasErrors) { try { Console.Error.WriteLine("--- Error building script extensions ---"); foreach (var error in results.Errors) { Console.Error.WriteLine(error); } } finally { scriptEnvironment.Dispose(); } return(new ScriptExtensions(configuration, null)); } else { var assemblyName = AssemblyName.GetAssemblyName(assemblyFile); configuration.AssemblyReferences.Add(assemblyName.Name); configuration.AssemblyLocations.Add(assemblyName.Name, ProcessorArchitecture.MSIL, assemblyName.CodeBase); scriptEnvironment.AssemblyName = assemblyName; } return(scriptEnvironment); } }
internal ScriptExtensionsEnvironment(ScriptExtensions owner) { extensions = owner; }
internal static int LaunchWorkflowEditor( PackageConfiguration packageConfiguration, ScriptExtensions scriptExtensions, string editorRepositoryPath, string initialFileName, float editorScale, bool start, bool debugging, Dictionary <string, string> propertyAssignments) { var elementProvider = WorkflowElementLoader.GetWorkflowElementTypes(packageConfiguration); var visualizerProvider = TypeVisualizerLoader.GetVisualizerTypes(packageConfiguration); var editorBootstrapper = new EditorBootstrapper(editorRepositoryPath); var packageManager = editorBootstrapper.PackageManager; using var cancellation = new CancellationTokenSource(); var updatesAvailable = Task.Run(async() => { try { var localPackages = packageManager.LocalRepository.GetLocalPackages(); foreach (var repository in packageManager.SourceRepositoryProvider.GetRepositories()) { try { if (cancellation.IsCancellationRequested) { break; } var updates = await repository.GetUpdatesAsync(localPackages, includePrerelease: false, cancellation.Token); if (updates.Any()) { return(true); } } catch { continue; } } return(false); } catch { return(false); } }, cancellation.Token); EditorBootstrapper.EnableVisualStyles(); var scriptEnvironment = new ScriptExtensionsEnvironment(scriptExtensions); using var mainForm = new EditorForm(elementProvider, visualizerProvider, scriptEnvironment, editorScale); try { updatesAvailable.ContinueWith( task => mainForm.UpdatesAvailable = !task.IsFaulted && !task.IsCanceled && task.Result, cancellation.Token); mainForm.FileName = initialFileName; mainForm.PropertyAssignments.AddRange(propertyAssignments); mainForm.LoadAction = start && debugging ? LoadAction.Start : start ? LoadAction.StartWithoutDebugging : LoadAction.None; Application.Run(mainForm); var editorFlags = mainForm.UpdatesAvailable ? EditorFlags.UpdatesAvailable : EditorFlags.None; if (scriptExtensions.DebugScripts) { editorFlags |= EditorFlags.DebugScripts; } AppResult.SetResult(editorFlags); AppResult.SetResult(mainForm.FileName); return((int)mainForm.EditorResult); } finally { cancellation.Cancel(); } }
public DependencyInspector(PackageConfiguration configuration) { ConfigurationHelper.SetAssemblyResolve(configuration); scriptEnvironment = new ScriptExtensions(configuration, null); packageConfiguration = configuration; }