Ejemplo n.º 1
0
        public ComInterfaceDescription LoadAssemblyDescription(string path, DescriptionDataTable descriptionCollection)
        {
            IAssemblyInfo assemblyInfo = _sequenceManager.CreateAssemblyInfo();

            assemblyInfo.Path = path;
            string assemblyName = string.Empty;
            string version      = string.Empty;
            ComInterfaceDescription assemblyDescription = _loader.LoadAssemblyDescription(path, ref assemblyName, ref version);

            CheckAssemblyDescription(assemblyDescription, assemblyInfo.AssemblyName, path);

            assemblyInfo.AssemblyName    = assemblyName;
            assemblyInfo.Version         = version;
            assemblyDescription.Assembly = assemblyInfo;

            ModuleUtils.ValidateComDescription(_sequenceManager, assemblyDescription, descriptionCollection);
            assemblyInfo.Available = true;
            descriptionCollection.Add(assemblyDescription);
            // 如果一个AppDomain载入过多的程序集,则卸载该AppDomain,构造新的AppDomain
//            if (_assemblyCount > Constants.MaxAssemblyCount)
//            {
//                AppDomain.Unload(_loaderDomain);
//                Thread.MemoryBarrier();
//                _loaderDomain = AppDomain.CreateDomain(Constants.AppDomainName);
//                _loader = (AssemblyDescriptionLoader)_loaderDomain.CreateInstanceAndUnwrap(_assemblyFullName, _loaderName);
//                Interlocked.Exchange(ref _assemblyCount, 0);
//            }
            return(assemblyDescription);
        }
Ejemplo n.º 2
0
        public IClassInterfaceDescription GetClassDescriptionByType(ITypeData typeData, out IAssemblyInfo assemblyInfo)
        {
            string assemblyName = typeData.AssemblyName;
            ComInterfaceDescription    interfaceDescription = _descriptionData.GetComDescription(assemblyName);
            IClassInterfaceDescription classDescription     = null;

            // 如果该类型描述已存在则直接返回
            if (interfaceDescription != null &&
                null != (classDescription = interfaceDescription.Classes.FirstOrDefault(item => item.ClassType.Equals(typeData))))
            {
                assemblyInfo = interfaceDescription.Assembly;
                return(classDescription);
            }
            string path, version;

            classDescription = _loaderManager.GetClassDescription(typeData, _descriptionData, out path, out version);

            assemblyInfo = GetAssemblyInfo(assemblyName);
            TestflowRunner testflowRunner;

            if (null == assemblyInfo && null != (testflowRunner = TestflowRunner.GetInstance()))
            {
                assemblyInfo              = testflowRunner.SequenceManager.CreateAssemblyInfo();
                assemblyInfo.Path         = path;
                assemblyInfo.Version      = version;
                assemblyInfo.AssemblyName = assemblyName;
                assemblyInfo.Available    = true;
                _descriptionData.Add(assemblyInfo);
            }
            return(classDescription);
        }
Ejemplo n.º 3
0
        private void LoadMscorLibDescription(DescriptionDataTable descriptionCollection)
        {
            Assembly assembly = typeof(int).Assembly;
            ComInterfaceDescription mscoreLibDescription = _loader.LoadMscorlibDescription();

            IAssemblyInfo assemblyInfo = _sequenceManager.CreateAssemblyInfo();

            assemblyInfo.Path         = assembly.Location;
            assemblyInfo.AssemblyName = assembly.GetName().Name;

            assemblyInfo.Version = assembly.GetName().Version.ToString();

            CheckAssemblyDescription(mscoreLibDescription, assemblyInfo.AssemblyName, assemblyInfo.Path);
            ModuleUtils.ValidateComDescription(_sequenceManager, mscoreLibDescription, descriptionCollection);
            assemblyInfo.Available        = true;
            mscoreLibDescription.Assembly = assemblyInfo;
            descriptionCollection.Add(mscoreLibDescription);
        }