public static FrameworkVersion ToFrameworkVersion(ExtendedFrameworkVersion version)
        {
            if (version == ExtendedFrameworkVersion.Version35ClientProfile)
            return FrameworkVersion.Version35;

              if (version == ExtendedFrameworkVersion.Version40ClientProfile)
            return FrameworkVersion.Version40;

              return (FrameworkVersion)version;
        }
        public static ExtendedFrameworkVersion GetSilverlightVersion(ExtendedFrameworkVersion version)
        {
            if (version == ExtendedFrameworkVersion.Version30)
            return ExtendedFrameworkVersion.Version30Silverlight;

              if (version == ExtendedFrameworkVersion.Version40)
            return ExtendedFrameworkVersion.Version40Silverlight;

              return version;
        }
        public static ExtendedFrameworkVersion GetClientProfileVersion(ExtendedFrameworkVersion version)
        {
            if (version == ExtendedFrameworkVersion.Version35)
            return ExtendedFrameworkVersion.Version35ClientProfile;

              if (version == ExtendedFrameworkVersion.Version40)
            return ExtendedFrameworkVersion.Version40ClientProfile;

              return version;
        }
 public void Load(BinaryReader reader, ExtendedFrameworkVersion frameworkVersion)
 {
     int count = reader.ReadInt32();
       for (int i = 0; i < count; i++)
       {
     TypeToAssemblyNamespaceMap map = LoadAssemblyMap(reader, frameworkVersion);
     if (map != null)
     {
       string fileName = map._AssemblyPath.ToLowerInvariant();
       _Assemblies[fileName] = map;
     }
       }
       MergeAssemblyMaps();
 }
        TypeToAssemblyNamespaceMap LoadAssemblyMap(BinaryReader reader, ExtendedFrameworkVersion frameworkVersion)
        {
            TypeToAssemblyNamespaceMap result = new TypeToAssemblyNamespaceMap();
              result._AssemblyPath = reader.ReadString();
              result._AssemblySignature = FileSignature.Read(reader);

              int typeCount = reader.ReadInt32();
              for (int typeIndex = 0; typeIndex < typeCount; typeIndex++)
              {
            string typeName = reader.ReadString();
            int namespaceCount = reader.ReadInt32();

            if (!result.ContainsKey(typeName))
              result.Add(typeName, new AssemblyNamespaceList());
            AssemblyNamespaceList assemblyNamespaces = result.GetNamespaceList(typeName);
            for (int i = 0; i < namespaceCount; i++)
            {
              int assemblyIndex = reader.ReadInt32();
              int namespaceIndex = reader.ReadInt32();
              assemblyNamespaces.Add(new AssemblyNamespace(frameworkVersion, assemblyIndex, namespaceIndex));
            }
              }
              return result;
        }
 List<TypeToAssemblyNamespaceMap> CollectTypesFromAssemblies(List<FileInfo> files, IAssemblyScanProgress progress, ExtendedFrameworkVersion frameworkVersion)
 {
     List<TypeToAssemblyNamespaceMap> result = new List<TypeToAssemblyNamespaceMap>();
       for (int i = 0; i < files.Count; i++)
       {
     try
     {
       FileInfo fileInfo = files[i];
       string text = fileInfo.Name;
       progress.UpdateProgress(i, text);
       TypeToAssemblyNamespaceMap typeAssemblyMap = CollectTypes(fileInfo.FullName, frameworkVersion);
       if (typeAssemblyMap != null)
     result.Add(typeAssemblyMap);
     }
     catch (Exception ex)
     {
       Log.SendException(ex);
     }
       }
       return result;
 }
        TypeToAssemblyNamespaceMap CollectTypes(string assemblyPath, ExtendedFrameworkVersion frameworkVersion)
        {
            assemblyPath = assemblyPath.ToLowerInvariant();

              TypeToAssemblyNamespaceMap result = new TypeToAssemblyNamespaceMap();
              result._AssemblyPath = assemblyPath;
              result._AssemblySignature = new FileSignature(assemblyPath);

              AssemblyTypeLoadResult typeLoadResult = LoadTypesFromAssembly(assemblyPath);
              if (typeLoadResult == null)
            return result;

              foreach (ITypeInfo typeInfo in typeLoadResult.Types)
              {
            if (!result.ContainsKey(typeInfo.NestedName))
              result.Add(typeInfo.NestedName, new AssemblyNamespaceList());
            AssemblyNamespaceList list = result.GetNamespaceList(typeInfo.NestedName);
            list.AddUnique(new AssemblyNamespace(typeLoadResult.AssemblyInfo.FullName, typeInfo.Namespace, frameworkVersion));
              }
              return result;
        }
 static string GetFrameworkVersionStr(ExtendedFrameworkVersion frameworkVersion)
 {
     switch (frameworkVersion)
       {
     case ExtendedFrameworkVersion.Version10:
       return "1.0";
     case ExtendedFrameworkVersion.Version11:
       return "1.1";
     case ExtendedFrameworkVersion.Version20:
       return "2.0";
     case ExtendedFrameworkVersion.Version30:
       return "3.0";
     case ExtendedFrameworkVersion.Version35:
       return "3.5";
     case ExtendedFrameworkVersion.Version40:
       return "4.0";
     default:
       return "";
       }
 }
        public void ScanFrameworkAssemblies(ExtendedFrameworkVersion frameworkVersion, string[] frameworkPaths)
        {
            RunOperationWithWaitCursor(() =>
              {
            AssemblyNamespace.InitializeCache(frameworkVersion);
            List<FileInfo> files = GetAssembliesToScan(frameworkPaths);
            if (files == null || files.Count == 0)
              return;

            IAssemblyScanProgress progress = StartAssembliesScan(frameworkVersion, files);
            try
            {
              List<TypeToAssemblyNamespaceMap> typeAssemblyMaps = CollectTypesFromAssemblies(files, progress, frameworkVersion);
              if (typeAssemblyMaps != null)
            AddTypeAssemblyMaps(typeAssemblyMaps);

              MergeAssemblyMaps();
            }
            finally
            {
              progress.Stop();
            }
              });
        }
        public static void LoadCache(CacheFileSystem fileSystem, ExtendedFrameworkVersion frameworkVersion)
        {
            if (assemblyCache.ContainsKey(frameworkVersion))
            assemblyCache[frameworkVersion].Clear();
              else
            assemblyCache.Add(frameworkVersion, new List<string>());

              string fileName = GetFileName(frameworkVersion);
              Stream stream = fileSystem.Read(fileName);
              if (stream == null)
            return;

              using (BinaryReader reader = new BinaryReader(stream))
              {
            bool hasAssemblyCache = reader.ReadBoolean();
            if (hasAssemblyCache)
              assemblyCache[frameworkVersion].AddRange(ReadStrings(reader));

            namespaceCache.Clear();
            namespaceCache.AddRange(ReadStrings(reader));
              }
        }
 public AssemblyNamespace(ExtendedFrameworkVersion frameworkVersion, int assemblyIndex, int namespaceIndex)
 {
     this.frameworkVersion = frameworkVersion;
       this.assemblyIndex = assemblyIndex;
       this.namespaceIndex = namespaceIndex;
 }
 public AssemblyNamespace(string assemblyName, string @namespace, ExtendedFrameworkVersion frameworkVersion)
 {
     this.frameworkVersion = frameworkVersion;
       Assembly = assemblyName;
       Namespace = @namespace;
 }
 static string GetFileName(ExtendedFrameworkVersion frameworkVersion)
 {
     return String.Format(STR_AssemblyCacheFormat, frameworkVersion);
 }
 public static void SaveCache(CacheFileSystem fileSystem, ExtendedFrameworkVersion frameworkVersion)
 {
     string fileName = GetFileName(frameworkVersion);
       using (MemoryStream stream = new MemoryStream())
       {
     using (BinaryWriter writer = new BinaryWriter(stream))
     {
       bool hasAssemblyCache = assemblyCache.ContainsKey(frameworkVersion);
       writer.Write(hasAssemblyCache);
       if (hasAssemblyCache)
     WriteStrings(writer, assemblyCache[frameworkVersion].ToArray());
       WriteStrings(writer, namespaceCache.ToArray());
       writer.Flush();
       stream.Position = 0;
       fileSystem.Write(fileName, stream);
     }
       }
 }
 IAssemblyScanProgress StartAssembliesScan(ExtendedFrameworkVersion frameworkVersion, List<FileInfo> files)
 {
     FrmCollectingClasses frmCollectingClasses = new FrmCollectingClasses();
       string frameworkVersionStr = GetFrameworkVersionStr(frameworkVersion);
       frmCollectingClasses.PerformingScanText = String.Format("Performing a one-time scan of the .NET {0} framework....", frameworkVersionStr);
       frmCollectingClasses.Show();
       frmCollectingClasses.Refresh();
       frmCollectingClasses.Start(files.Count);
       return frmCollectingClasses;
 }
 public static ExtendedFrameworkVersion GetWindowsPhoneProfileVersion(ExtendedFrameworkVersion version)
 {
     if (version == ExtendedFrameworkVersion.Version40)
     return ExtendedFrameworkVersion.Version40SilverlightWindowsPhone;
       return version;
 }
 // public static methods...
 public static void InitializeCache(ExtendedFrameworkVersion frameworkVersion)
 {
     if (!assemblyCache.ContainsKey(frameworkVersion))
     assemblyCache.Add(frameworkVersion, new List<string>());
 }