static async Task Main(string[] args) { const string path = "C:\\Users\\T-Gamer\\source\\repos\\Analyser\\Analyser\\bin\\Debug\\netcoreapp2.1\\Data"; var assembly = await CSNSMemory.LoadAssemblyAsync(path, "MyAssembly"); var Soma = CSNSStaticLoader.LoadMethod(assembly, "Matematica.Mate.Soma"); var result = Soma(2, 3); Console.WriteLine($"Static method Soma result: {result.ToString()}"); var classe = CSNSStaticLoader.InstanceClass(assembly, "Matematica.Matema", new object[] { 2 }); var resultado = classe.Soma(4); Console.WriteLine($"Method Soma from instanciated class result: {resultado.ToString()}"); await classe.SubtractAsync(); Console.ReadKey(); }
static async Task Main(string[] args) { const string filename = "matematica.cs"; const string path = "C:\\Users\\T-Gamer\\source\\repos\\Analyser\\Analyser\\bin\\Debug\\netcoreapp2.1\\Data"; string code = Path.Combine(path, filename); Loader loader = new Loader(code, "_matematicas"); await loader.LoadFileAsync(); var assembly = loader.Assembly; CSNSStaticLoader.LoadCode(assembly); var soma = CSNSStaticLoader.LoadMethod(assembly, "matematica.Mate.soma"); var result = soma(2, 3); var classe = CSNSStaticLoader.InstanceClass(assembly, "matematica.Matema", new object[] { 2 }); var resultado = classe.soma(4); Console.ReadKey(); }
public async Task LoadAsync(Type[] types = null) { SyntaxTree[] syntaxTrees; FileAttributes fileAttr = File.GetAttributes(PathLocation); if (fileAttr.HasFlag(FileAttributes.Directory)) { syntaxTrees = (await LoadSyntaxTreeFolderAsync(PathLocation)).ToArray(); } else { syntaxTrees = new SyntaxTree[] { await LoadSyntaxTreeAsync(PathLocation) } }; var callerAssembly = Assembly.GetEntryAssembly(); ClientHelper.ActHelper.Commands = callerAssembly.GetType("Commands"); var locationNetCore = typeof(System.Net.Http.HttpClient).Assembly.Location; var pathNetCore = @"C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.netcore.app\2.1.0\ref\netcoreapp2.1"; var directoryInfo = new DirectoryInfo(pathNetCore); FileInfo[] files = directoryInfo.GetFiles("*.dll"); List <MetadataReference> metadataReferences = new List <MetadataReference>(); foreach (var file in files) { metadataReferences.Add(MetadataReference.CreateFromFile(file.FullName)); } metadataReferences.Add(MetadataReference.CreateFromFile(typeof(CSNS.ClientHelper.ActHelper).Assembly.Location)); metadataReferences.Add(MetadataReference.CreateFromFile(typeof(Newtonsoft.Json.JsonConvert).Assembly.Location)); //Next work, try to think a way to run References from outside. var compilation = CSharpCompilation.Create($"{AssemblyName}.dll", syntaxTrees, metadataReferences, new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); using (MemoryStream memoryStream = new MemoryStream()) { var result = compilation.Emit(memoryStream); if (!result.Success) { var diagnostics = result.Diagnostics.Where(obj => obj.Severity == DiagnosticSeverity.Error); if (diagnostics.Any()) { var error = string.Join(" \n", diagnostics.Select(a => $"{a.WarningLevel.ToString()} - {a.GetMessage()}")); throw new Exception(error); } } memoryStream.Seek(0, SeekOrigin.Begin); Assembly = ReloadAssembly(memoryStream); } CSNSStaticLoader.LoadCode(Assembly); }