Example #1
0
        public virtual void Parse()
        {
            if (References.Where(t => t.IndexOf("mscorlib.dll", StringComparison.InvariantCultureIgnoreCase) >= 0).FirstOrDefault() == null) //Don't add mscorlib twice
            {
                string mscorlib = null;
                if (!String.IsNullOrEmpty(TargetFrameworkVersion))
                {
                    if (TargetFrameworkVersion == "v2.0" ||
                        TargetFrameworkVersion == "v3.0" ||
                        TargetFrameworkVersion == "v3.5")
                    {
                        mscorlib = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), @"assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll");
                    }
                }
                if (mscorlib == null)
                {
                    mscorlib = typeof(string).Assembly.Location;
                }
                References.Add(mscorlib);
            }

            NFiles       = new List <NFile>();
            CSharpParser = new CSharpParser();
            if (Defines != null)
            {
                Defines.ForEach(t => CSharpParser.CompilerSettings.ConditionalSymbols.Add(t));
            }
            NFiles = SourceFiles.Select(t => new NFile {
                Filename = t, Project = this
            }).ToList();
            AssemblyReferences = References.Select(t => new NAssembly {
                Filename = t
            }).ToList();
            //danel: parser.ErrorPrinter

            ParseCsFiles();
            LoadAssemblies();
            var ms = StopwatchHelper.TimeInMs(LoadAssemblies);

            FormatLine("{0} References End: {1}ms", AssemblyReferences.Count, ms);
            ProjectContent     = new CSharpProjectContent();
            ProjectContent     = (CSharpProjectContent)ProjectContent.SetAssemblyName(AssemblyName);
            ProjectContent     = (CSharpProjectContent)ProjectContent.AddAssemblyReferences(AssemblyReferences.Select(t => t.UnresolvedAssembly).Where(t => t != null));
            ProjectContent     = (CSharpProjectContent)ProjectContent.AddOrUpdateFiles(NFiles.Select(t => t.UnresolvedFile));
            ProjectContent.Tag = this;
            ms = StopwatchHelper.TimeInMs(() => Compilation = ProjectContent.CreateCompilation());
            Compilation.CacheManager.SetShared(typeof(NProject), this);
            FormatLine("CreateCompilation {0}ms", ms);
            //Navigator = CreateNavigator(null);
            //ApplyNavigator will happen BeforeExport only on needed files, in parallel
        }