Beispiel #1
0
        /// <summary>
        /// Load currently known assemblies
        /// </summary>
        private void LoadAssemblies()
        {
            lock (Locker)
            {
                //Clear current
                LoadedAssemblies.Clear();

                //Get all from current assembly directory
                var executableLocation = Assembly.GetEntryAssembly().Location;
                var path = Path.Combine(Path.GetDirectoryName(executableLocation));
                LoadedAssemblies.AddRange(GetAssemblies(path));

                //Get all from plug-ins locations
                string custompath = Config.GlobalConfig.AssembliesPath;

                //Check if path exists for reporting
                if (!string.IsNullOrWhiteSpace(custompath) && !Directory.Exists(custompath))
                {
                    _log.Warn($"Cannot load custom assemblies path, path does not exist {custompath}");
                }

                //Load
                if (!string.IsNullOrWhiteSpace(custompath) && Directory.Exists(custompath) && path != custompath)
                {
                    var found = GetAssemblies(custompath);
                    LoadedAssemblies.AddRange(found.Where(x => !LoadedAssemblies.Select(n => n.Location).Contains(x.Location)));
                }

                //Load container
                Container = new ContainerConfiguration().WithAssemblies(LoadedAssemblies);
            }
        }
            public IEnumerable <string> GetAssemblyLocation(string connectionString)
            {
                Load(connectionString);

                if (LoadedAssemblies != null)
                {
                    return(LoadedAssemblies.Select(a => a.Location));
                }

                var directory = Path.GetDirectoryName(Assembly.GetCallingAssembly().Location);

                if (directory == null)
                {
                    return(Provider.GetLibraries());
                }
                return(Provider.GetLibraries().Select(l => Path.Combine(directory, l)));
            }
        private void Compile(IList <string> sourceFiles, string assemblyName, string assemblyPath)
        {
            var parseOptions = CSharpParseOptions.Default;

            parseOptions = parseOptions.WithPreprocessorSymbols("NETCORE");

            var syntaxTrees = sourceFiles
                              .Select(path => CSharpSyntaxTree.ParseText(
                                          File.ReadAllText(path), parseOptions, path, Encoding.UTF8))
                              .ToList();

            LoadAssembliesFromUsings(syntaxTrees);
            var references = LoadedAssemblies.Select(assembly => assembly.Location)
                             .Select(path => MetadataReference.CreateFromFile(path))
                             .ToList();
            var compilationOptions = new CSharpCompilationOptions(
                OutputKind.DynamicallyLinkedLibrary, optimizationLevel: OptimizationLevel.Release);
            var withTopLevelBinderFlagsMethod = compilationOptions.GetType()
                                                .GetMethod("WithTopLevelBinderFlags", BindingFlags.Instance | BindingFlags.NonPublic);
            var binderFlagsType = withTopLevelBinderFlagsMethod.GetParameters()[0].ParameterType;

            compilationOptions = (CSharpCompilationOptions)withTopLevelBinderFlagsMethod.Invoke(
                compilationOptions,
                new object[] { binderFlagsType.GetField("IgnoreCorLibraryDuplicatedTypes").GetValue(binderFlagsType) });

            var compilation = CSharpCompilation.Create(assemblyName)
                              .WithOptions(compilationOptions)
                              .AddReferences(references)
                              .AddSyntaxTrees(syntaxTrees);
            var emitResult = compilation.Emit(assemblyPath, null);

            if (!emitResult.Success)
            {
                throw new Exception(string.Join("\r\n",
                                                emitResult.Diagnostics.Where(d => d.WarningLevel == 0)));
            }
        }
Beispiel #4
0
 internal void InitialiseDependencyResolvers()
 {
     _dependencyResolvers = LoadedAssemblies.Select(x => new DependencyResolver(x.Value)).ToList();
 }