Пример #1
0
        /// <summary>
        /// Adds an assembly set that is referenced by the assemblies of this addin.
        /// </summary>
        /// <param name="referencedAssemblySet">The referenced assembly set.</param>
        internal void AddReferencedAssemblySet(AssemblyResolutionSet referencedAssemblySet)
        {
            // if the referenced assembly is provided by this addin itself, don't bother to resolve it at the runtime.
            foreach (var referencedAssembly in referencedAssemblySet)
            {
                if (ReferenceEquals(referencedAssembly.DeclaringAddin, this))
                {
                    return;
                }
            }

            _referencedAssemblySets = _referencedAssemblySets ?? new List <AssemblyResolutionSet>();
            if (_referencedAssemblySets.Contains(referencedAssemblySet))
            {
                return;
            }
            _referencedAssemblySets.Add(referencedAssemblySet);

            var addinSet = new AddinResolutionSet();

            if (Enabled)
            {
                // 如果插件初始状态定义为 Enabled,那么只要它引用的任何一个插件是 Enabled 的,插件最终解析状态就是 Enabled 的
                var shouldEnable = false;
                foreach (var referencedAssembly in referencedAssemblySet)
                {
                    addinSet.Add(referencedAssembly.DeclaringAddin);
                    if (referencedAssembly.DeclaringAddin.Enabled)
                    {
                        shouldEnable = true;
                    }
                }
                Enabled = shouldEnable;
            }
            else
            {
                foreach (var referencedAssembly in referencedAssemblySet)
                {
                    addinSet.Add(referencedAssembly.DeclaringAddin);
                }
            }

            _referencedAddinSets = _referencedAddinSets ?? new List <AddinResolutionSet>();
            _referencedAddinSets.Add(addinSet);
        }
        bool TryLoadAndRegisterAssembly(ResolutionResult resolutionResult, AssemblyResolution assembly)
        {
            if (!assembly.TryLoad())
            {
                resolutionResult.AddError("Failed to load assembly file " + assembly.AssemblyFile.FilePath);
                return(false);
            }

            AssemblyResolutionSet assemblySet;

            if (!_key2AssemblySets.TryGetValue(assembly.AssemblyKey, out assemblySet))
            {
                assemblySet = new AssemblyResolutionSet();
                _key2AssemblySets[assembly.AssemblyKey] = assemblySet;
            }

            //if (assembly.AssemblyFile.Uid != UidStorage.InvalidAssemblyUid)
            //    _uid2AssemblySets.Add(assembly.AssemblyFile.Uid, assemblySet);

            assemblySet.Add(assembly);

            return(true);
        }
Пример #3
0
        bool TryLoadAndRegisterAssembly(IMessageDialog dialog, AssemblyResolution assembly)
        {
            if (!assembly.TryLoad())
            {
                dialog.AddError("");
                return(false);
            }

            AssemblyResolutionSet assemblySet;

            if (!_key2AssemblySets.TryGetValue(assembly.AssemblyKey, out assemblySet))
            {
                assemblySet = new AssemblyResolutionSet();
                _key2AssemblySets[assembly.AssemblyKey] = assemblySet;
            }

            //if (assembly.AssemblyFile.Uid != UidProvider.InvalidAssemblyUid)
            //    _uid2AssemblySets.Add(assembly.AssemblyFile.Uid, assemblySet);

            assemblySet.Add(assembly);

            return(true);
        }
 public bool TryGetAssemblySet(AssemblyKey assemblyKey, out AssemblyResolutionSet assemblySet)
 {
     return(_key2AssemblySets.TryGetValue(assemblyKey, out assemblySet));
 }