示例#1
0
        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);
            }
        }
示例#2
0
        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;
 }
示例#4
0
        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(); }
        }
示例#5
0
 public DependencyInspector(PackageConfiguration configuration)
 {
     ConfigurationHelper.SetAssemblyResolve(configuration);
     scriptEnvironment    = new ScriptExtensions(configuration, null);
     packageConfiguration = configuration;
 }