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 CheckClassDescription(IClassInterfaceDescription description, string assemblyName, string fullName) { if (null != description && _loader.Exception == null && _loader.ErrorCode == 0) { return; } I18N i18N = I18N.GetInstance(Constants.I18nName); ILogService logService = TestflowRunner.GetInstance().LogService; string assembly = assemblyName; switch (_loader.ErrorCode) { case ModuleErrorCode.HighVersion: logService.Print(LogLevel.Warn, CommonConst.PlatformLogSession, $"The version of assembly '{assembly}' is higher than version defined in data."); break; case ModuleErrorCode.LowVersion: logService.Print(LogLevel.Error, CommonConst.PlatformLogSession, $"The version of assembly '{assembly}' is lower than version defined in data."); throw new TestflowRuntimeException(ModuleErrorCode.LowVersion, i18N.GetFStr("LowAssemblyVersion", assembly)); break; case ModuleErrorCode.LibraryLoadError: if (null != _loader.Exception) { logService.Print(LogLevel.Error, CommonConst.PlatformLogSession, _loader.Exception, $"Assembly '{assembly}' load error."); throw new TestflowRuntimeException(ModuleErrorCode.LibraryLoadError, i18N.GetFStr(_loader.Exception.Message), _loader.Exception); } else { logService.Print(LogLevel.Error, CommonConst.PlatformLogSession, $"Assembly '{assembly}' load error."); throw new TestflowRuntimeException(ModuleErrorCode.LibraryLoadError, i18N.GetStr("RuntimeError")); } case ModuleErrorCode.TypeCannotLoad: logService.Print(LogLevel.Error, CommonConst.PlatformLogSession, _loader.Exception, $"Type '{fullName}' does not exist."); throw new TestflowRuntimeException(ModuleErrorCode.TypeCannotLoad, i18N.GetFStr("TypeNotFound", fullName)); case ModuleErrorCode.LibraryNotFound: logService.Print(LogLevel.Error, CommonConst.PlatformLogSession, $"Assembly '{assembly}' has not been loaded."); throw new TestflowRuntimeException(ModuleErrorCode.LibraryNotFound, i18N.GetFStr("LibNotFound", assembly)); case ModuleErrorCode.AssemblyNotLoad: logService.Print(LogLevel.Error, CommonConst.PlatformLogSession, _loader.Exception, $"Assemly '{assemblyName}' does not exist."); throw new TestflowRuntimeException(ModuleErrorCode.AssemblyNotLoad, i18N.GetFStr("AssemblyNotLoad", assemblyName)); break; default: if (null != _loader.Exception) { throw new TestflowRuntimeException(ModuleErrorCode.LibraryLoadError, i18N.GetFStr("RuntimeError", _loader.Exception.Message), _loader.Exception); } if (null == description) { throw new TestflowRuntimeException(ModuleErrorCode.LibraryLoadError, i18N.GetStr("RuntimeError")); } break; } }