Example #1
0
        public static void AddDyanamicAssembly(System.Activities.Presentation.WorkflowDesigner WorkflowDesigner, System.Activities.Presentation.Hosting.AssemblyContextControlItem acci, Assembly asm)
        {
            if (!acci.ReferencedAssemblyNames.Select(x => x.FullName).Contains(asm.GetName().FullName))
            {
                acci.ReferencedAssemblyNames.Add(asm.GetName());
                WorkflowDesigner.Context.Items.SetValue(acci);
            }
            var root     = GetRootElement(WorkflowDesigner);
            var fullname = asm.FullName;
            var asmname  = asm.GetName().Name;

            if (null == root)
            {
                return;
            }
            var vbs = Microsoft.VisualBasic.Activities.VisualBasic.GetSettings(root) ?? new Microsoft.VisualBasic.Activities.VisualBasicSettings();

            var namespaces = (from type in asm.GetTypes() select type.Namespace).Distinct();

            foreach (var name in namespaces)
            {
                if (string.IsNullOrEmpty(name))
                {
                    continue;
                }
                var import = new Microsoft.VisualBasic.Activities.VisualBasicImportReference()
                {
                    Assembly = asmname, Import = name
                };
                vbs.ImportReferences.Add(import);
            }
            Microsoft.VisualBasic.Activities.VisualBasic.SetSettings(root, vbs);
        }
Example #2
0
        //public static System.Activities.ActivityWithResult TryCreateLiteral(Type type, string expressionText)
        //{
        //    var ActivityDesignerAsm = typeof(System.Activities.Presentation.ActivityDesigner).Assembly;
        //    var types = ActivityDesignerAsm.GetTypes();
        //    var ExpressionHelper = types.Where(x => x.Name == "ExpressionHelper").FirstOrDefault();
        //    var ParserContext = types.Where(x => x.Name == "ParserContext").FirstOrDefault();

        //    object context = Activator.CreateInstance(ParserContext);

        //    var TryCreateLiteralMethod = ExpressionHelper.GetMethods(BindingFlags.Static | BindingFlags.NonPublic).Where(x => x.Name == "TryCreateLiteral").FirstOrDefault();
        //    var o = TryCreateLiteralMethod.Invoke(ExpressionHelper, new object[] { type, expressionText, context });
        //    return o as System.Activities.ActivityWithResult;
        //}
        public static void AddVBNamespaceSettings(System.Activities.ActivityBuilder rootObject, string[] namespaces, params Type[] types)
        {
            var rootElement = rootObject.Implementation;
            var vbsettings  = Microsoft.VisualBasic.Activities.VisualBasic.GetSettings(rootObject);

            if (vbsettings == null)
            {
                vbsettings = new Microsoft.VisualBasic.Activities.VisualBasicSettings();
            }
            foreach (var name in namespaces)
            {
                var import = new Microsoft.VisualBasic.Activities.VisualBasicImportReference()
                {
                    Import = name
                };
                vbsettings.ImportReferences.Add(import);
            }
            foreach (Type t in types)
            {
                vbsettings.ImportReferences.Add(
                    new Microsoft.VisualBasic.Activities.VisualBasicImportReference
                {
                    Assembly = t.Assembly.GetName().Name,
                    Import   = t.Namespace
                });
            }
            Microsoft.VisualBasic.Activities.VisualBasic.SetSettings(rootObject, vbsettings);
        }
Example #3
0
        public static void DynamicAssemblyMonitor(System.Activities.Presentation.WorkflowDesigner WorkflowDesigner, string fullname, Assembly asm, bool toadd)
        {
            //var modelService = WorkflowDesigner.Context.Services.GetService<System.Activities.Presentation.Services.ModelService>();
            //using (ModelEditingScope editingScope = modelService.Root.BeginEdit("Implementation"))
            //{
            //    var acci = WorkflowDesigner.Context.Items.GetValue<System.Activities.Presentation.Hosting.AssemblyContextControlItem>() ?? new System.Activities.Presentation.Hosting.AssemblyContextControlItem();
            //    if (acci.ReferencedAssemblyNames == null)
            //        acci.ReferencedAssemblyNames = new List<AssemblyName>();
            //    if (toadd)
            //        AddDyanamicAssembly(WorkflowDesigner, acci, asm);
            //    else
            //        RemoveDynamicAssembly(WorkflowDesigner, acci, asm);
            //    editingScope.Complete();
            //}
            var modelService = WorkflowDesigner.Context.Services.GetService <System.Activities.Presentation.Services.ModelService>();

            using (ModelEditingScope editingScope = modelService.Root.BeginEdit("Implementation"))
            {
                var acci = WorkflowDesigner.Context.Items.GetValue <System.Activities.Presentation.Hosting.AssemblyContextControlItem>() ?? new System.Activities.Presentation.Hosting.AssemblyContextControlItem();
                if (acci.ReferencedAssemblyNames == null)
                {
                    var root       = GetRootElement(WorkflowDesigner);
                    var vbsettings = Microsoft.VisualBasic.Activities.VisualBasic.GetSettings(root) ?? new Microsoft.VisualBasic.Activities.VisualBasicSettings();

                    var namespaces = WorkflowDesigner.Context.Items.GetValue <System.Activities.Presentation.Hosting.ImportedNamespaceContextItem>().ImportedNamespaces.ToArray();
                    var orgs       = acci.AllAssemblyNamesInContext.ToList();
                    var orgs2      = new List <AssemblyName>();
                    foreach (var a in orgs)
                    {
                        orgs2.Add(new AssemblyName(a));
                    }

                    IEnumerable <Assembly> appAssemblies = AppDomain.CurrentDomain.GetAssemblies();
                    var result = new List <AssemblyName>();
                    foreach (var a in appAssemblies)
                    {
                        if (a.IsDynamic)
                        {
                            continue;
                        }
                        var _namespaces = a.ExportedTypes.Select(x => x.Namespace).ToArray();
                        var exists      = _namespaces.Where(x => namespaces.Contains(x));
                        if (exists.Count() > 0)
                        {
                            try
                            {
                                var asmname = a.GetName().Name;
                                result.Add(a.GetName());
                                foreach (var name in _namespaces)
                                {
                                    if (string.IsNullOrEmpty(name))
                                    {
                                        continue;
                                    }
                                    var import = new Microsoft.VisualBasic.Activities.VisualBasicImportReference()
                                    {
                                        Assembly = asmname, Import = name
                                    };
                                    vbsettings.ImportReferences.Add(import);
                                }
                            }
                            catch (Exception)
                            {
                                Log.Error("DynamicAssemblyMonitor: " + a.FullName);
                            }
                        }
                    }
                    acci.ReferencedAssemblyNames = result;
                    Microsoft.VisualBasic.Activities.VisualBasic.SetSettings(root, vbsettings);
                }
                if (acci.ReferencedAssemblyNames == null)
                {
                    acci.ReferencedAssemblyNames = new List <AssemblyName>();
                }
                if (toadd)
                {
                    AddDyanamicAssembly(WorkflowDesigner, acci, asm);
                }
                else
                {
                    RemoveDynamicAssembly(WorkflowDesigner, acci, asm);
                }
                editingScope.Complete();
            }
        }
Example #4
0
        public static void DynamicAssemblyMonitor2(System.Activities.Presentation.WorkflowDesigner WorkflowDesigner, string fullname, Assembly asm, bool toadd)
        {
            var acci = WorkflowDesigner.Context.Items.GetValue <System.Activities.Presentation.Hosting.AssemblyContextControlItem>() ?? new System.Activities.Presentation.Hosting.AssemblyContextControlItem();

            if (acci.ReferencedAssemblyNames == null)
            {
                var namespaces = WorkflowDesigner.Context.Items.GetValue <System.Activities.Presentation.Hosting.ImportedNamespaceContextItem>().ImportedNamespaces.ToArray();

                var orgs  = acci.AllAssemblyNamesInContext.ToList();
                var orgs2 = new List <AssemblyName>();
                foreach (var a in orgs)
                {
                    orgs2.Add(new AssemblyName(a));
                }
                IEnumerable <Assembly> appAssemblies = AppDomain.CurrentDomain.GetAssemblies();
                var result = new List <AssemblyName>();
                foreach (var a in appAssemblies)
                {
                    if (a.IsDynamic)
                    {
                        continue;
                    }
                    var _namespaces = a.ExportedTypes.Select(x => x.Namespace).ToArray();
                    var exists      = _namespaces.Where(x => namespaces.Contains(x));
                    if (exists.Count() > 0)
                    {
                        try
                        {
                            // AddDyanamicAssembly(WorkflowDesigner, acci, a);
                            result.Add(a.GetName());
                        }
                        catch (Exception)
                        {
                            Log.Error("DynamicAssemblyMonitor2: " + a.FullName);
                        }
                    }
                }
                acci.ReferencedAssemblyNames = result;
                var rootObject = GetRootElement(WorkflowDesigner) as System.Activities.ActivityBuilder;
                var vbsettings = Microsoft.VisualBasic.Activities.VisualBasic.GetSettings(rootObject) ?? new Microsoft.VisualBasic.Activities.VisualBasicSettings();

                foreach (var name in namespaces)
                {
                    var import = new Microsoft.VisualBasic.Activities.VisualBasicImportReference()
                    {
                        Import = name
                    };
                    vbsettings.ImportReferences.Add(import);
                }
                Microsoft.VisualBasic.Activities.VisualBasic.SetSettings(rootObject, vbsettings);
                WorkflowDesigner.Context.Items.SetValue(acci);
            }
            if (toadd)
            {
                AddDyanamicAssembly(WorkflowDesigner, acci, asm);
            }
            else
            {
                RemoveDynamicAssembly(WorkflowDesigner, acci, asm);
            }
        }