From 5ed5ef7ef65731a9e509cb7a707722458da206d1 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Wed, 22 Apr 2020 13:28:13 +0300 Subject: Working on FSE scripting. Fixed issue with gradient generation using the color converter RGB only entry point for RGB and LAB brush stops. --- .../Tango.Scripting.Basic/ReferenceAssembly.cs | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.Basic/ReferenceAssembly.cs') 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 _assembliesCache; + + static ReferenceAssembly() + { + _assembliesCache = new Dictionary(); + } + 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; + } } } -- cgit v1.3.1