diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-04-22 13:28:13 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-04-22 13:28:13 +0300 |
| commit | 5ed5ef7ef65731a9e509cb7a707722458da206d1 (patch) | |
| tree | c5bbe5086113a629c7a7c365698a95c971904c9b /Software/Visual_Studio/Scripting/Tango.Scripting.Basic | |
| parent | 34d7201f46c07a6311fcaa9df329ec22c5ebdb49 (diff) | |
| download | Tango-5ed5ef7ef65731a9e509cb7a707722458da206d1.tar.gz Tango-5ed5ef7ef65731a9e509cb7a707722458da206d1.zip | |
Working on FSE scripting.
Fixed issue with gradient generation using the color converter RGB only entry point for RGB and LAB brush stops.
Diffstat (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.Basic')
| -rw-r--r-- | Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs | 40 | ||||
| -rw-r--r-- | Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ReferenceAssembly.cs | 54 |
2 files changed, 70 insertions, 24 deletions
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs index 14a9d94da..446e5b529 100644 --- a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs @@ -15,6 +15,7 @@ using Tango.Core; using Tango.Core.IO; using Tango.Scripting.Core; using System.IO; +using Tango.Core.Helpers; namespace Tango.Scripting.Basic { @@ -38,9 +39,6 @@ namespace Tango.Scripting.Basic public ObservableCollection<ReferenceAssembly> ReferenceAssemblies { get; set; } - [JsonIgnore] - public ObservableCollection<Assembly> ReferenceAssembliesLoaded { get; set; } - public ObservableCollection<Script> Scripts { get; set; } [JsonIgnore] @@ -57,38 +55,20 @@ namespace Tango.Scripting.Basic ApartmentState = ApartmentState.MTA; ReferenceAssemblies = new ObservableCollection<ReferenceAssembly>(); - ReferenceAssemblies.CollectionChanged += ReferenceAssemblies_CollectionChanged; - ReferenceAssembliesLoaded = new ObservableCollection<Assembly>(); Scripts = new ObservableCollection<Script>(); Scripts.CollectionChanged += (x, e) => { RaisePropertyChanged(nameof(AdditionalScripts)); }; } - private void ReferenceAssemblies_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) - { - LoadReferenceAssemblies(); - } - - private void LoadReferenceAssemblies() - { - ReferenceAssembliesLoaded.Clear(); - - foreach (var asm in ReferenceAssemblies) - { - ReferenceAssembliesLoaded.Add(Assembly.LoadFrom(asm.File)); - } - } - - public static Project<T> New(String name) + public static TProject New<TProject, TContext>(String name) where TProject : Project<TContext> where TContext : IContext { - Project<T> p = new Project<T>(); + TProject p = Activator.CreateInstance<TProject>(); p.Name = name; p.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(String))); p.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(Enumerable))); p.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(Form))); - p.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(Project<T>))); return p; } @@ -146,7 +126,7 @@ namespace Tango.Scripting.Basic } } - var scriptOptions = ScriptOptions.Default.WithReferences(ReferenceAssembliesLoaded); + var scriptOptions = ScriptOptions.Default.WithReferences(LoadReferenceAssemblies()); var s = CSharpScript.Create<object>(mainScriptCode, scriptOptions, typeof(GlobalObject<T>)); result.Script = s; @@ -215,5 +195,17 @@ namespace Tango.Scripting.Basic return session; } + + public List<Assembly> LoadReferenceAssemblies() + { + List<Assembly> loadedAssemblies = new List<Assembly>(); + + foreach (var asm in ReferenceAssemblies) + { + loadedAssemblies.Add(asm.Load()); + } + + return loadedAssemblies; + } } } diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ReferenceAssembly.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ReferenceAssembly.cs index 4b04270c1..665bd7ab1 100644 --- a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ReferenceAssembly.cs +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ReferenceAssembly.cs @@ -3,15 +3,26 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Reflection; using System.Text; using System.Threading.Tasks; +using Tango.Core.Helpers; namespace Tango.Scripting.Basic { public class ReferenceAssembly { + private static Dictionary<String, Assembly> _assembliesCache; + + static ReferenceAssembly() + { + _assembliesCache = new Dictionary<string, Assembly>(); + } + public String File { get; set; } + public Type HintType { get; set; } + [JsonIgnore] public String Name { @@ -21,6 +32,7 @@ namespace Tango.Scripting.Basic public static ReferenceAssembly FromType(Type type) { ReferenceAssembly reference = new ReferenceAssembly(); + reference.HintType = type; var assembly = type.Assembly; reference.File = assembly.Location; return reference; @@ -30,5 +42,47 @@ namespace Tango.Scripting.Basic { return new ReferenceAssembly() { File = file }; } + + public Assembly Load() + { + Assembly loaded = null; + if (!_assembliesCache.TryGetValue(Name, out loaded)) + { + try + { + if (HintType != null) + { + loaded = HintType.Assembly; + } + else + { + loaded = Assembly.LoadFrom(File); + } + + _assembliesCache.Add(Name, loaded); + } + catch + { + try + { + String dotNetPath = AssemblyHelper.GetAssemblyTargetFrameworkFolder(Assembly.GetExecutingAssembly()); + String dotNetAsm = Path.Combine(dotNetPath, Name + ".dll"); + loaded = Assembly.LoadFrom(dotNetAsm); + _assembliesCache.Add(Name, loaded); + } + catch (Exception ex) + { + throw new FileNotFoundException($"Could not load assembly '{Name}'. File not found.", ex); + } + } + } + + return loaded; + } + + public override string ToString() + { + return Name; + } } } |
