private void RefreshUsedAssemblies(IAssemblyInfoCollection assemblies, HashSet <string> usedAssembly) { for (int i = assemblies.Count - 1; i >= 0; i--) { if (usedAssembly.Contains(assemblies[i].AssemblyName)) { continue; } assemblies.RemoveAt(i); } foreach (string assemblyName in usedAssembly) { IAssemblyInfo assemblyInfo = assemblies.FirstOrDefault(item => item.AssemblyName.Equals(assemblyName)); if (null != assemblyInfo) { continue; } assemblyInfo = _comInterfaceManager.GetAssemblyInfo(assemblyName); if (null == assemblyInfo) { ILogService logService = TestflowRunner.GetInstance().LogService; logService.Print(LogLevel.Error, CommonConst.PlatformLogSession, 0, $"Unloaded assembly '{assemblyName}' used."); I18N i18N = I18N.GetInstance(Constants.I18nName); throw new TestflowDataException(ModuleErrorCode.TypeDataError, i18N.GetFStr("InvalidAssemblyUsed", assemblyName)); } assemblies.Add(assemblyInfo); } }
public AssemblyInvoker(SlaveContext context, IAssemblyInfoCollection assemblyInfo, ITypeDataCollection typeDatas) { this._assembliesMapping = new Dictionary <string, Assembly>(assemblyInfo.Count); this._typeDataMapping = new Dictionary <string, Type>(typeDatas.Count); this._assemblyInfos = assemblyInfo; this._typeDatas = typeDatas; this._context = context; this._dotNetLibDir = context.GetProperty <string>("DotNetLibDir"); this._platformLibDir = context.GetProperty <string>("PlatformLibDir"); this._instanceLibDir = context.GetProperty <string>("InstanceLibDir").Split(';'); _valueTypeConvertors = new Dictionary <string, Func <string, object> >(20) { { typeof(double).Name, valueStr => double.Parse(valueStr) }, { typeof(float).Name, valueStr => float.Parse(valueStr) }, { typeof(long).Name, valueStr => long.Parse(valueStr) }, { typeof(ulong).Name, valueStr => ulong.Parse(valueStr) }, { typeof(int).Name, valueStr => int.Parse(valueStr) }, { typeof(uint).Name, valueStr => uint.Parse(valueStr) }, { typeof(short).Name, valueStr => short.Parse(valueStr) }, { typeof(ushort).Name, valueStr => ushort.Parse(valueStr) }, { typeof(char).Name, valueStr => char.Parse(valueStr) }, { typeof(byte).Name, valueStr => byte.Parse(valueStr) }, { typeof(bool).Name, valueStr => bool.Parse(valueStr) }, { typeof(decimal).Name, valueStr => decimal.Parse(valueStr) }, { typeof(sbyte).Name, valueStr => sbyte.Parse(valueStr) }, { typeof(DateTime).Name, valueStr => DateTime.Parse(valueStr) }, }; }
public IList <IComInterfaceDescription> GetComponentInterfaces(IAssemblyInfoCollection assemblyInfos) { List <IComInterfaceDescription> descriptions = new List <IComInterfaceDescription>(assemblyInfos.Count); foreach (IAssemblyInfo assemblyInfo in assemblyInfos) { descriptions.Add(GetComponentInterface(assemblyInfo)); } return(descriptions); }
private void SetToRelativePath(IAssemblyInfoCollection assemblies) { foreach (IAssemblyInfo assemblyInfo in assemblies) { if (IsRelativePath(assemblyInfo.Path)) { continue; } // 如果包含在可用路径内则替换为相对路径 foreach (string availableDir in availableDirs) { if (assemblyInfo.Path.StartsWith(availableDir, StringComparison.OrdinalIgnoreCase)) { // 将绝对路径截取为相对路径 assemblyInfo.Path = assemblyInfo.Path.Substring(availableDir.Length, assemblyInfo.Path.Length - availableDir.Length); break; } } } }
private void SetToAbsolutePath(IAssemblyInfoCollection assemblies) { foreach (IAssemblyInfo assemblyInfo in assemblies) { // 如果是绝对路径则继续执行 string path = assemblyInfo.Path; if (!IsRelativePath(path)) { continue; } string abosolutePath = InternalGetAbosolutePath(path); // 如果没找到库,则抛出异常 if (null == abosolutePath) { ILogService logService = TestflowRunner.GetInstance().LogService; logService.Print(LogLevel.Error, CommonConst.PlatformLogSession, $"Assembly '{assemblyInfo.AssemblyName}' cannot be found in '{assemblyInfo.Path}'."); I18N i18N = I18N.GetInstance(Constants.I18nName); throw new TestflowDataException(ModuleErrorCode.DeSerializeFailed, i18N.GetFStr("AssemblyCannotFound", assemblyInfo.AssemblyName)); } assemblyInfo.Path = abosolutePath; } }