public SimpleCompilation(ISolutionSnapshot solutionSnapshot, IUnresolvedAssembly mainAssembly, IEnumerable <IAssemblyReference> assemblyReferences)
        {
            if (solutionSnapshot == null)
            {
                throw new ArgumentNullException("solutionSnapshot");
            }
            if (mainAssembly == null)
            {
                throw new ArgumentNullException("mainAssembly");
            }
            if (assemblyReferences == null)
            {
                throw new ArgumentNullException("assemblyReferences");
            }
            this.solutionSnapshot = solutionSnapshot;
            this.context          = new SimpleTypeResolveContext(this);
            this.mainAssembly     = mainAssembly.Resolve(context);
            List <IAssembly> assemblies = new List <IAssembly>();

            assemblies.Add(this.mainAssembly);
            List <IAssembly> referencedAssemblies = new List <IAssembly>();

            foreach (var asmRef in assemblyReferences)
            {
                IAssembly asm;
                try {
                    asm = asmRef.Resolve(context);
                } catch (InvalidOperationException) {
                    throw new InvalidOperationException("Tried to initialize compilation with an invalid assembly reference. (Forgot to load the assembly reference ? - see CecilLoader)");
                }
                if (asm != null && !assemblies.Contains(asm))
                {
                    assemblies.Add(asm);
                }
                if (asm != null && !referencedAssemblies.Contains(asm))
                {
                    referencedAssemblies.Add(asm);
                }
            }
            this.assemblies           = assemblies.AsReadOnly();
            this.referencedAssemblies = referencedAssemblies.AsReadOnly();
            this.knownTypeCache       = new KnownTypeCache(this);
        }
Exemple #2
0
        protected void Init(IModuleReference mainAssembly, IEnumerable <IModuleReference> assemblyReferences)
        {
            if (mainAssembly == null)
            {
                throw new ArgumentNullException(nameof(mainAssembly));
            }
            if (assemblyReferences == null)
            {
                throw new ArgumentNullException(nameof(assemblyReferences));
            }
            var context = new SimpleTypeResolveContext(this);

            this.mainModule = mainAssembly.Resolve(context);
            List <IModule> assemblies = new List <IModule>();

            assemblies.Add(this.mainModule);
            List <IModule> referencedAssemblies = new List <IModule>();

            foreach (var asmRef in assemblyReferences)
            {
                IModule asm;
                try
                {
                    asm = asmRef.Resolve(context);
                }
                catch (InvalidOperationException)
                {
                    throw new InvalidOperationException("Tried to initialize compilation with an invalid assembly reference. (Forgot to load the assembly reference ? - see CecilLoader)");
                }
                if (asm != null && !assemblies.Contains(asm))
                {
                    assemblies.Add(asm);
                }
                if (asm != null && !referencedAssemblies.Contains(asm))
                {
                    referencedAssemblies.Add(asm);
                }
            }
            this.assemblies           = assemblies.AsReadOnly();
            this.referencedAssemblies = referencedAssemblies.AsReadOnly();
            this.knownTypeCache       = new KnownTypeCache(this);
            this.initialized          = true;
        }