Ejemplo n.º 1
0
    /// <summary>
    /// 对程序集上下文的重载函数,注:系统规定需要重载
    /// </summary>
    /// <param name="assemblyName">程序集名</param>
    /// <returns></returns>
    protected override Assembly?Load(AssemblyName assemblyName)
    {
#if DEBUG
        Debug.WriteLine($"[解析]程序集:{assemblyName.Name},全名:{assemblyName.FullName}");
#endif
        if (_assemblyLoadBehavior != LoadBehaviorEnum.None && Name != "Default")
        {
            var name = assemblyName.GetUniqueName();
            if (_defaultAssemblyNameCache.TryGetValue(name !, out var defaultCacheName))
            {
                if (assemblyName.CompareWithDefault(defaultCacheName, _assemblyLoadBehavior) == LoadVersionResultEnum.UseDefault)
                {
                    return(null);
                }
            }
            //var asm = this.LoadFromAssemblyName(assemblyName);//死循环代码
        }
        var result = _excludePluginReferencesFunc(assemblyName);
        if (!result)
        {
            string?assemblyPath = _dependencyResolver !.ResolveAssemblyToPath(assemblyName);
            if (assemblyPath != null)
            {
                return(LoadAssemblyFromFile(assemblyPath));
            }
        }
        return(null);
    }
Ejemplo n.º 2
0
        private void AddReference(AssemblyName assemblyName, PortableExecutableReference reference, LoadBehaviorEnum loadReferenceBehavior)
        {
            var name = assemblyName.GetUniqueName();

            if (loadReferenceBehavior != LoadBehaviorEnum.None)
            {
                if (_referenceNameCache.TryGetValue(name, out var oldAssemblyName))
                {
                    if (assemblyName.CompareWithDefault(oldAssemblyName, loadReferenceBehavior) == LoadVersionResultEnum.UseCustomer)
                    {
                        _referenceCache !.Remove(oldAssemblyName);
                    }
                    else
                    {
                        return;
                    }
                }
            }
            _referenceNameCache[name]     = assemblyName;
            _referenceCache[assemblyName] = reference;
        }