private void LoadAssembliesFromUsings(IList <SyntaxTree> syntaxTrees)
 {
     foreach (var tree in syntaxTrees)
     {
         foreach (var usingSyntax in ((CompilationUnitSyntax)tree.GetRoot()).Usings)
         {
             var name  = usingSyntax.Name;
             var names = new List <string>();
             while (name != null)
             {
                 if (name is QualifiedNameSyntax)
                 {
                     var qualifiedName  = (QualifiedNameSyntax)name;
                     var identifierName = (IdentifierNameSyntax)qualifiedName.Right;
                     names.Add(identifierName.Identifier.Text);
                     name = qualifiedName.Left;
                 }
                 else if (name is IdentifierNameSyntax)
                 {
                     var identifierName = (IdentifierNameSyntax)name;
                     names.Add(identifierName.Identifier.Text);
                     name = null;
                 }
             }
             if (names.Contains("src"))
             {
                 continue;
             }
             names.Reverse();
             for (int c = 1; c <= names.Count; ++c)
             {
                 var usingName = string.Join(".", names.Take(c));
                 if (LoadedNamespaces.Contains(usingName))
                 {
                     continue;
                 }
                 try
                 {
                     Load(usingName);
                 }
                 catch
                 {
                 }
                 LoadedNamespaces.Add(usingName);
             }
         }
     }
 }
Beispiel #2
0
    /// <summary>
    /// Loads the specified assemblies
    /// </summary>
    /// <param name="assemblyFiles">Assemblies</param>
    public void LoadAssemblies(params string[] assemblyFiles)
    {
        new TaskFactory().StartNew(() =>
        {
            while (LoadingAssemblies) /* wait */ } {
                LoadingAssemblies = true;

                foreach (string asm in assemblyFiles)
                {
                    foreach (var t in Assembly.LoadFile(asm.Contains("\\") ? asm : AssembliesLocation + asm)
                             .GetTypes().Where(t => t.IsPublic))
                    {
                        LoadedTypes.Add(t);
                        LoadedNamespaces.Add(t.Namespace);
                    }
                }

                LoadingAssemblies = false;
});