Beispiel #1
0
        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();
        }
Beispiel #2
0
        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();
        }
Beispiel #3
0
        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);
        }