internal SharedCodeService(SharedCodeServiceParameters parameters, ILoggingService loggingService)
        {
            Debug.Assert(parameters != null, "parameters cannot be null");
            Debug.Assert(parameters.SharedSourceFiles != null, "sharedSourceFiles cannot be null");
            Debug.Assert(parameters.ClientAssemblies != null, "clientAssemblies cannot be null");

            // Convert optional list of PDB paths to semicolon separated list
            string symbolSearchPath = parameters.SymbolSearchPaths == null
                                        ? null
                                        : string.Join(";", parameters.SymbolSearchPaths);

            // We create an aggregating source file location service that will check in this order:
            //  1. SourceInfoAttributes generated by Live Intellisense, then
            //  2. PDB info
            ISourceFileProviderFactory[] factories = new ISourceFileProviderFactory[]
            {
                new SourceInfoSourceFileProviderFactory(),
                new PdbSourceFileProviderFactory(symbolSearchPath, loggingService)
            };

            this._locationService   = new SourceFileLocationService(factories, this._filenameMap);
            this._sharedSourceFiles = new SharedSourceFiles(this._locationService, this._filenameMap, parameters.SharedSourceFiles);
            this._sharedAssemblies  = new SharedAssemblies(parameters.ClientAssemblies, parameters.ClientAssemblyPathsNormalized, loggingService);
        }
        internal SharedCodeService(SharedCodeServiceParameters parameters, ILoggingService loggingService)
        {
            Debug.Assert(parameters != null, "parameters cannot be null");
            Debug.Assert(parameters.SharedSourceFiles != null, "sharedSourceFiles cannot be null");
            Debug.Assert(parameters.ClientAssemblies != null, "clientAssemblies cannot be null");

            // Convert optional list of PDB paths to semicolon separated list
            string symbolSearchPath = parameters.SymbolSearchPaths == null
                                        ? null
                                        : string.Join(";", parameters.SymbolSearchPaths);

            // We create an aggregating source file location service that will check in this order:
            //  1. SourceInfoAttributes generated by Live Intellisense, then
            //  2. PDB info
            ISourceFileProviderFactory[] factories = new ISourceFileProviderFactory[] 
            {
                new SourceInfoSourceFileProviderFactory(),
                new PdbSourceFileProviderFactory(symbolSearchPath, loggingService)
            };

            this._locationService = new SourceFileLocationService(factories, this._filenameMap);
            this._sharedSourceFiles = new SharedSourceFiles(this._locationService, this._filenameMap, parameters.SharedSourceFiles);
            this._sharedAssemblies = new SharedAssemblies(parameters.ClientAssemblies, parameters.ClientAssemblyPathsNormalized, loggingService);
        }