コード例 #1
0
            static MetadataReference RegisterAssembly(Assembly assembly)
            {
                var assemblyName = assembly.GetName();

                if (AdditionalAssemblies.Value.TryGetValue(assemblyName.FullName, out var additionalAssembly))
                {
                    return(additionalAssembly.AssemblyMetadataReference);
                }

                if (AdditionalAssemblies.Value.TryGetValue(assemblyName.Name, out additionalAssembly))
                {
                    return(additionalAssembly.AssemblyMetadataReference);
                }

                additionalAssembly = new AdditionalAssemblyServerSide(assemblyName, assembly, CreateMetadataReferenceFromAssembly(assembly), AdditionalAssemblyType.Package);

                AdditionalAssemblies.Value.TryAdd(assemblyName.FullName, additionalAssembly);
                AdditionalAssemblies.Value.TryAdd(assemblyName.Name, additionalAssembly);

                return(additionalAssembly.AssemblyMetadataReference);
            }
コード例 #2
0
        private static ConcurrentDictionary <string, AdditionalAssemblyServerSide> DiscoverAdditionalAssemblies()
        {
            var results = new ConcurrentDictionary <string, AdditionalAssemblyServerSide>(StringComparer.OrdinalIgnoreCase);

            foreach (var path in Directory.GetFiles(AppContext.BaseDirectory, "*.dll"))
            {
                if (Logger.IsInfoEnabled)
                {
                    Logger.Info($"Attempting to load additional assembly from '{path}'.");
                }

                try
                {
                    var name      = AssemblyLoadContext.GetAssemblyName(path);
                    var assembly  = AssemblyLoadContext.Default.LoadFromAssemblyPath(path);
                    var reference = CreateMetadataReferenceFromAssembly(assembly);

                    var result = new AdditionalAssemblyServerSide(name, assembly, reference, AdditionalAssemblyType.BaseDirectory);
                    results.TryAdd(name.FullName, result);
                    results.TryAdd(name.Name, result);

                    if (Logger.IsInfoEnabled)
                    {
                        Logger.Info($"Loaded additional assembly from '{path}' and registered it under '{name.Name}'.");
                    }
                }
                catch (Exception e)
                {
                    if (Logger.IsInfoEnabled)
                    {
                        Logger.Info($"Could not load additional assembly from '{path}'.", e);
                    }
                }
            }

            return(results);
        }