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); }
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); }
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); }