예제 #1
0
 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);
     }
 }
예제 #2
0
        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) },
            };
        }
예제 #3
0
        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);
        }
예제 #4
0
 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;
             }
         }
     }
 }
예제 #5
0
 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;
     }
 }