Пример #1
0
        public static IServiceProvider CreateDefaultServiceProvider(IOmniSharpEnvironment environment, IConfiguration configuration, IEventEmitter eventEmitter, IServiceCollection services = null)
        {
            services = services ?? new ServiceCollection();

            services.AddSingleton(environment);
            services.AddSingleton(eventEmitter);

            // Caching
            services.AddSingleton <IMemoryCache, MemoryCache>();
            services.AddSingleton <IAssemblyLoader, AssemblyLoader>();
            services.AddOptions();

            services.AddSingleton <IDotNetCliService, DotNetCliService>();

            // MSBuild
            services.AddSingleton <IMSBuildLocator>(sp =>
                                                    MSBuildLocator.CreateDefault(
                                                        loggerFactory: sp.GetService <ILoggerFactory>(),
                                                        assemblyLoader: sp.GetService <IAssemblyLoader>()));

            // Setup the options from configuration
            services.Configure <OmniSharpOptions>(configuration);
            services.AddLogging();

            return(services.BuildServiceProvider());
        }
        public CakeScriptService(IOmniSharpEnvironment environment, ICakeConfiguration configuration, ILoggerFactory loggerFactory)
        {
            if (environment == null)
            {
                throw new ArgumentNullException(nameof(environment));
            }
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }
            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }

            var serverExecutablePath = ScriptGenerationToolResolver.GetExecutablePath(environment.TargetDirectory, configuration);

            if (File.Exists(serverExecutablePath))
            {
                _generationService = PlatformHelper.IsMono ?
                                     new ScriptGenerationClient(new MonoScriptGenerationProcess(serverExecutablePath, environment, loggerFactory), environment.TargetDirectory, loggerFactory) :
                                     new ScriptGenerationClient(serverExecutablePath, environment.TargetDirectory, loggerFactory);
            }

            IsConnected       = _generationService != null;
            _cachedReferences = new Dictionary <string, ISet <string> >();
            _cachedUsings     = new Dictionary <string, ISet <string> >();
        }
        private static void ProvideWorkspaceOptions(
            CompositionHost compositionHost,
            OmniSharpWorkspace workspace,
            IOptionsMonitor <OmniSharpOptions> options,
            ILogger logger,
            IOmniSharpEnvironment omnisharpEnvironment)
        {
            // run all workspace options providers
            var workspaceOptionsProviders = compositionHost.GetExports <IWorkspaceOptionsProvider>().OrderBy(x => x.Order);

            foreach (var workspaceOptionsProvider in workspaceOptionsProviders)
            {
                var providerName = workspaceOptionsProvider.GetType().FullName;

                try
                {
                    logger.LogInformation($"Invoking Workspace Options Provider: {providerName}, Order: {workspaceOptionsProvider.Order}");
                    if (!workspace.TryApplyChanges(workspace.CurrentSolution.WithOptions(workspaceOptionsProvider.Process(workspace.Options, options.CurrentValue, omnisharpEnvironment))))
                    {
                        logger.LogWarning($"Couldn't apply options from Workspace Options Provider: {providerName}");
                    }
                }
                catch (Exception e)
                {
                    var message = $"The workspace options provider '{providerName}' threw exception during execution.";
                    logger.LogError(e, message);
                }
            }
        }
Пример #4
0
        public ProjectSystem(
            IOmniSharpEnvironment environment,
            OmniSharpWorkspace workspace,
            IMSBuildLocator msbuildLocator,
            DotNetCliService dotNetCliService,
            SdksPathResolver sdksPathResolver,
            MetadataFileReferenceCache metadataFileReferenceCache,
            IEventEmitter eventEmitter,
            IFileSystemWatcher fileSystemWatcher,
            FileSystemHelper fileSystemHelper,
            ILoggerFactory loggerFactory)
        {
            _environment                = environment;
            _workspace                  = workspace;
            _propertyOverrides          = msbuildLocator.RegisteredInstance.PropertyOverrides;
            _dotNetCli                  = dotNetCliService;
            _sdksPathResolver           = sdksPathResolver;
            _metadataFileReferenceCache = metadataFileReferenceCache;
            _eventEmitter               = eventEmitter;
            _fileSystemWatcher          = fileSystemWatcher;
            _fileSystemHelper           = fileSystemHelper;
            _loggerFactory              = loggerFactory;

            _projectsToProcess = new Queue <ProjectFileInfo>();
            _logger            = loggerFactory.CreateLogger <ProjectSystem>();
        }
        public static IServiceProvider Create(
            ITestOutputHelper testOutput,
            IOmniSharpEnvironment environment,
            IEnumerable <KeyValuePair <string, string> > configurationData = null,
            DotNetCliVersion dotNetCliVersion = DotNetCliVersion.Current,
            IEventEmitter eventEmitter        = null)
        {
            var loggerFactory = new LoggerFactory()
                                .AddXunit(testOutput);

            eventEmitter = eventEmitter ?? NullEventEmitter.Instance;

            var assemblyLoader         = CreateAssemblyLoader(loggerFactory);
            var dotNetCliService       = CreateDotNetCliService(dotNetCliVersion, loggerFactory, eventEmitter);
            var configuration          = CreateConfiguration(configurationData, dotNetCliService);
            var memoryCache            = CreateMemoryCache();
            var msbuildLocator         = CreateMSBuildLocator(loggerFactory, assemblyLoader);
            var optionsMonitor         = CreateOptionsMonitor(configuration);
            var sharedTextWriter       = CreateSharedTextWriter(testOutput);
            var analyzerAssemblyLoader = new AnalyzerAssemblyLoader();

            return(new TestServiceProvider(
                       environment, loggerFactory, assemblyLoader, analyzerAssemblyLoader, memoryCache, sharedTextWriter,
                       msbuildLocator, eventEmitter, dotNetCliService, configuration, optionsMonitor));
        }
        private TestServiceProvider(
            IOmniSharpEnvironment environment,
            ILoggerFactory loggerFactory,
            IAssemblyLoader assemblyLoader,
            IAnalyzerAssemblyLoader analyzerAssemblyLoader,
            IMemoryCache memoryCache,
            ISharedTextWriter sharedTextWriter,
            IMSBuildLocator msbuildLocator,
            IEventEmitter eventEmitter,
            IDotNetCliService dotNetCliService,
            IConfigurationRoot configuration,
            IOptionsMonitor <OmniSharpOptions> optionsMonitor)
        {
            _logger = loggerFactory.CreateLogger <TestServiceProvider>();

            AddService(environment);
            AddService(loggerFactory);
            AddService(assemblyLoader);
            AddService(memoryCache);
            AddService(sharedTextWriter);
            AddService(msbuildLocator);
            AddService(eventEmitter);
            AddService(dotNetCliService);
            AddService(configuration);
            AddService(optionsMonitor);
            AddService(analyzerAssemblyLoader);
        }
Пример #7
0
        private static bool LogFilter(string category, LogLevel level, IOmniSharpEnvironment environment)
        {
            if (environment.LogLevel > level)
            {
                return(false);
            }

            if (string.Equals(category, typeof(ExceptionHandlerMiddleware).FullName, StringComparison.OrdinalIgnoreCase))
            {
                return(true);
            }

            if (!category.StartsWith("OmniSharp", StringComparison.OrdinalIgnoreCase))
            {
                return(false);
            }

            if (string.Equals(category, typeof(WorkspaceInformationService).FullName, StringComparison.OrdinalIgnoreCase))
            {
                return(false);
            }

            if (string.Equals(category, typeof(ProjectEventForwarder).FullName, StringComparison.OrdinalIgnoreCase))
            {
                return(false);
            }

            return(true);
        }
Пример #8
0
        public Startup(IOmniSharpEnvironment env)
        {
            _env = env;

            var configBuilder = new ConfigurationBuilder()
                                .SetBasePath(AppContext.BaseDirectory)
                                .AddJsonFile(Constants.ConfigFile, optional: true)
                                .AddEnvironmentVariables("OMNISHARP_");

            if (env.AdditionalArguments?.Length > 0)
            {
                configBuilder.AddCommandLine(env.AdditionalArguments);
            }

            // Use the global omnisharp config if there's any in the shared path
            configBuilder.CreateAndAddGlobalOptionsFile(env);

            // Use the local omnisharp config if there's any in the root path
            configBuilder.AddJsonFile(
                new PhysicalFileProvider(env.TargetDirectory).WrapForPolling(),
                Constants.OptionsFile,
                optional: true,
                reloadOnChange: true);

            Configuration = configBuilder.Build();
        }
Пример #9
0
        public ProjectSystem(
            IOmniSharpEnvironment environment,
            OmniSharpWorkspace workspace,
            IMSBuildLocator msbuildLocator,
            IDotNetCliService dotNetCliService,
            SdksPathResolver sdksPathResolver,
            MetadataFileReferenceCache metadataFileReferenceCache,
            IEventEmitter eventEmitter,
            IFileSystemWatcher fileSystemWatcher,
            FileSystemHelper fileSystemHelper,
            ILoggerFactory loggerFactory,
            CachingCodeFixProviderForProjects codeFixesForProjects,
            RulesetsForProjects rulesetsForProjects,
            IAnalyzerAssemblyLoader assemblyLoader,
            [ImportMany] IEnumerable <IMSBuildEventSink> eventSinks)
        {
            _environment                = environment;
            _workspace                  = workspace;
            _propertyOverrides          = msbuildLocator.RegisteredInstance.PropertyOverrides;
            _dotNetCli                  = dotNetCliService;
            _sdksPathResolver           = sdksPathResolver;
            _metadataFileReferenceCache = metadataFileReferenceCache;
            _eventEmitter               = eventEmitter;
            _fileSystemWatcher          = fileSystemWatcher;
            _fileSystemHelper           = fileSystemHelper;
            _loggerFactory              = loggerFactory;
            _rulesetsForProjects        = rulesetsForProjects;
            _eventSinks                 = eventSinks.ToImmutableArray();

            _projectsToProcess = new Queue <ProjectFileInfo>();
            _logger            = loggerFactory.CreateLogger <ProjectSystem>();
            _assemblyLoader    = assemblyLoader;
        }
Пример #10
0
        public TestServiceProvider(
            IOmniSharpEnvironment environment,
            ILoggerFactory loggerFactory,
            ISharedTextWriter sharedTextWriter,
            IConfiguration configuration)
        {
            _logger = loggerFactory.CreateLogger <TestServiceProvider>();

            _services[typeof(IOptionsMonitor <OmniSharpOptions>)] = new OptionsMonitor <OmniSharpOptions>(
                new IConfigureOptions <OmniSharpOptions>[] {
                new ConfigureOptions <OmniSharpOptions>(c => ConfigurationBinder.Bind(configuration, c))
            },
                Enumerable.Empty <IOptionsChangeTokenSource <OmniSharpOptions> >()
                );

            var assemblyLoader = new AssemblyLoader(loggerFactory);
            var msbuildLocator = MSBuildLocator.CreateStandAlone(loggerFactory, assemblyLoader, allowMonoPaths: false);
            var memoryCache    = new MemoryCache(new MemoryCacheOptions());

            _services[typeof(ILoggerFactory)]        = loggerFactory;
            _services[typeof(IOmniSharpEnvironment)] = environment;
            _services[typeof(IAssemblyLoader)]       = assemblyLoader;
            _services[typeof(IMemoryCache)]          = memoryCache;
            _services[typeof(ISharedTextWriter)]     = sharedTextWriter;
            _services[typeof(IMSBuildLocator)]       = msbuildLocator;
        }
Пример #11
0
        public ScriptProjectSystem(OmniSharpWorkspace workspace, IOmniSharpEnvironment env, ILoggerFactory loggerFactory,
                                   MetadataFileReferenceCache metadataFileReferenceCache, IFileSystemWatcher fileSystemWatcher)
        {
            _metadataFileReferenceCache = metadataFileReferenceCache;
            _workspace         = workspace;
            _env               = env;
            _fileSystemWatcher = fileSystemWatcher;
            _logger            = loggerFactory.CreateLogger <ScriptProjectSystem>();
            _projects          = new ConcurrentDictionary <string, ProjectInfo>();

            _compilationDependencyResolver = new CompilationDependencyResolver(type =>
            {
                // Prefix with "OmniSharp" so that we make it through the log filter.
                var categoryName             = $"OmniSharp.Script.{type.FullName}";
                var dependencyResolverLogger = loggerFactory.CreateLogger(categoryName);
                return((level, message) =>
                {
                    if (level == LogLevel.Debug)
                    {
                        dependencyResolverLogger.LogDebug(message);
                    }
                    if (level == LogLevel.Info)
                    {
                        dependencyResolverLogger.LogInformation(message);
                    }
                });
            });
        }
Пример #12
0
        public CakeConfiguration(IOmniSharpEnvironment environment, ILoggerFactory loggerFactory)
        {
            _lookup = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);

            // Parse the configuration file.
            var configurationPath = Path.Combine(environment.TargetDirectory, "cake.config");

            if (File.Exists(configurationPath))
            {
                try
                {
                    var parser        = new ConfigurationParser();
                    var configuration = parser.Read(configurationPath);
                    foreach (var key in configuration.Keys)
                    {
                        _lookup[KeyNormalizer.Normalize(key)] = configuration[key];
                    }
                }
                catch (Exception ex)
                {
                    loggerFactory
                    .CreateLogger <CakeConfiguration>()
                    .LogError(ex, "Error occured while parsing Cake configuration.");
                }
            }
        }
Пример #13
0
        private static void ProvideWorkspaceOptions(
            CompositionHost compositionHost,
            OmniSharpWorkspace workspace,
            IOptionsMonitor <OmniSharpOptions> options,
            ILogger logger,
            IOmniSharpEnvironment omnisharpEnvironment)
        {
            // run all workspace options providers
            var workspaceOptionsProviders = compositionHost.GetExports <IWorkspaceOptionsProvider>().OrderBy(x => x.Order);

            foreach (var workspaceOptionsProvider in workspaceOptionsProviders)
            {
                var providerName = workspaceOptionsProvider.GetType().FullName;

                try
                {
                    LoggerExtensions.LogInformation(logger, $"Invoking Workspace Options Provider: {providerName}, Order: {workspaceOptionsProvider.Order}");
                    workspace.Options = workspaceOptionsProvider.Process(workspace.Options, options.CurrentValue, omnisharpEnvironment);
                }
                catch (Exception e)
                {
                    var message = $"The workspace options provider '{providerName}' threw exception during execution.";
                    logger.LogError(e, message);
                }
            }
        }
Пример #14
0
 public ConfigurationBuilder(IOmniSharpEnvironment environment)
 {
     _environment = environment;
     _builder     = new Microsoft.Extensions.Configuration.ConfigurationBuilder()
                    .SetBasePath(AppContext.BaseDirectory)
                    .AddJsonFile(Constants.ConfigFile, optional: true);
 }
Пример #15
0
 public Startup(IOmniSharpEnvironment environment, IEventEmitter eventEmitter, ISharedTextWriter writer)
 {
     _environment   = environment;
     _eventEmitter  = eventEmitter;
     _writer        = writer;
     _configuration = new ConfigurationBuilder(environment).Build();
 }
Пример #16
0
 public CakeScriptService(IOmniSharpEnvironment environment, ICakeConfiguration cakeConfiguration, ILoggerFactory loggerFactory)
 {
     _environment       = environment ?? throw new ArgumentNullException(nameof(environment));
     _cakeConfiguration = cakeConfiguration ?? throw new ArgumentNullException(nameof(cakeConfiguration));
     _loggerFactory     = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
     _cachedReferences  = new Dictionary <string, ISet <string> >();
     _cachedUsings      = new Dictionary <string, ISet <string> >();
 }
 public ScriptProjectSystem(OmniSharpWorkspace workspace, IOmniSharpEnvironment env, ILoggerFactory loggerFactory, MetadataFileReferenceCache metadataFileReferenceCache)
 {
     _metadataFileReferenceCache = metadataFileReferenceCache;
     _workspace             = workspace;
     _env                   = env;
     _logger                = loggerFactory.CreateLogger <ScriptProjectSystem>();
     _projects              = new Dictionary <string, ProjectInfo>();
     _scriptProjectProvider = ScriptProjectProvider.Create(loggerFactory);
 }
Пример #18
0
        public TestServiceProvider(IOmniSharpEnvironment environment, ILoggerFactory loggerFactory, ISharedTextWriter sharedTextWriter)
        {
            _logger = loggerFactory.CreateLogger <TestServiceProvider>();

            _services[typeof(ILoggerFactory)]        = loggerFactory;
            _services[typeof(IOmniSharpEnvironment)] = environment;
            _services[typeof(IAssemblyLoader)]       = new AssemblyLoader(loggerFactory);
            _services[typeof(IMemoryCache)]          = new MemoryCache(new MemoryCacheOptions());
            _services[typeof(ISharedTextWriter)]     = sharedTextWriter;
        }
Пример #19
0
        public ScriptProjectProvider(ScriptOptions scriptOptions, IOmniSharpEnvironment env, ILoggerFactory loggerFactory, bool isDesktopClr)
        {
            _scriptOptions = scriptOptions ?? throw new ArgumentNullException(nameof(scriptOptions));
            _env           = env ?? throw new ArgumentNullException(nameof(env));

            _logger             = loggerFactory.CreateLogger <ScriptProjectSystem>();
            _compilationOptions = new Lazy <CSharpCompilationOptions>(CreateCompilationOptions);
            _commandLineArgs    = new Lazy <CSharpCommandLineArguments>(CreateCommandLineArguments);
            _isDesktopClr       = isDesktopClr;
        }
Пример #20
0
 public PluginProjectSystem(
     IOmniSharpEnvironment environment,
     OmniSharpWorkspace workspace,
     ILoggerFactory loggerFactory)
 {
     _environment   = environment;
     _workspace     = workspace;
     _loggerFactory = loggerFactory;
     _logger        = loggerFactory.CreateLogger <PluginProjectSystem>();
 }
 public string GetNormalizedRspFilePath(IOmniSharpEnvironment env)
 {
     if (string.IsNullOrWhiteSpace(RspFilePath))
     {
         return(null);
     }
     return(Path.IsPathRooted(RspFilePath)
         ? RspFilePath
         : Path.Combine(env.TargetDirectory, RspFilePath));
 }
Пример #22
0
 public ScriptProjectSystem(OmniSharpWorkspace workspace, IOmniSharpEnvironment env, ILoggerFactory loggerFactory,
                            ScriptContextProvider scriptContextProvider, IFileSystemWatcher fileSystemWatcher, FileSystemHelper fileSystemHelper)
 {
     _workspace             = workspace;
     _env                   = env;
     _fileSystemWatcher     = fileSystemWatcher;
     _fileSystemHelper      = fileSystemHelper;
     _logger                = loggerFactory.CreateLogger <ScriptProjectSystem>();
     _scriptContextProvider = scriptContextProvider;
 }
Пример #23
0
        public static IServiceProvider CreateDefaultServiceProvider(
            IOmniSharpEnvironment environment,
            IConfigurationRoot configuration,
            IEventEmitter eventEmitter,
            IServiceCollection services = null,
            Action <ILoggingBuilder> configureLogging = null)
        {
            services ??= new ServiceCollection();

            services.TryAddSingleton(_ => new ManualFileSystemWatcher());
            services.TryAddSingleton <IFileSystemNotifier>(sp => sp.GetRequiredService <ManualFileSystemWatcher>());
            services.TryAddSingleton <IFileSystemWatcher>(sp => sp.GetRequiredService <ManualFileSystemWatcher>());

            services.AddSingleton(environment);
            services.AddSingleton(eventEmitter);

            // Caching
            services.AddSingleton <IMemoryCache, MemoryCache>();
            services.AddSingleton <IAssemblyLoader, AssemblyLoader>();
            services.AddSingleton <IAnalyzerAssemblyLoader, AnalyzerAssemblyLoader>();
            services.AddOptions();

            services.AddSingleton <IDotNetCliService, DotNetCliService>();

            // MSBuild
            services.AddSingleton <IMSBuildLocator>(sp =>
                                                    MSBuildLocator.CreateDefault(
                                                        loggerFactory: sp.GetService <ILoggerFactory>(),
                                                        assemblyLoader: sp.GetService <IAssemblyLoader>(),
                                                        msbuildConfiguration: configuration.GetSection("msbuild")));


            // Setup the options from configuration
            services.Configure <OmniSharpOptions>(configuration)
            .PostConfigure <OmniSharpOptions>(OmniSharpOptions.PostConfigure);
            services.AddSingleton(configuration);
            services.AddSingleton <IConfiguration>(configuration);

            services.AddLogging(builder =>
            {
                var workspaceInformationServiceName = typeof(WorkspaceInformationService).FullName;
                var projectEventForwarder           = typeof(ProjectEventForwarder).FullName;

                builder.AddFilter(
                    (category, logLevel) =>
                    environment.LogLevel <= logLevel &&
                    category.StartsWith("OmniSharp", StringComparison.OrdinalIgnoreCase) &&
                    !category.Equals(workspaceInformationServiceName, StringComparison.OrdinalIgnoreCase) &&
                    !category.Equals(projectEventForwarder, StringComparison.OrdinalIgnoreCase));

                configureLogging?.Invoke(builder);
            });

            return(services.BuildServiceProvider());
        }
 public CompositionHostBuilder(
     IServiceProvider serviceProvider,
     IOmniSharpEnvironment environment,
     IEventEmitter eventEmitter,
     IEnumerable <Assembly> assemblies = null)
 {
     _serviceProvider = serviceProvider;
     _environment     = environment;
     _eventEmitter    = eventEmitter;
     _assemblies      = assemblies ?? Array.Empty <Assembly>();
 }
Пример #25
0
        public string GetNormalizedRspFilePath(IOmniSharpEnvironment env)
        {
            if (string.IsNullOrWhiteSpace(RspFilePath))
            {
                return(null);
            }

            var expandedPath = Environment.ExpandEnvironmentVariables(RspFilePath);

            return(Path.IsPathRooted(expandedPath)
                ? expandedPath
                : Path.Combine(env.TargetDirectory, expandedPath));
        }
Пример #26
0
 public Host(
     IOmniSharpEnvironment environment,
     ISharedTextWriter sharedTextWriter,
     PluginAssemblies commandLinePlugins,
     int serverPort,
     string serverInterface)
 {
     _environment        = environment;
     _sharedTextWriter   = sharedTextWriter;
     _commandLinePlugins = commandLinePlugins;
     _serverPort         = serverPort;
     _serverInterface    = serverInterface;
 }
Пример #27
0
        public CakeProjectSystem(
            OmniSharpWorkspace workspace,
            IOmniSharpEnvironment environment,
            IAssemblyLoader assemblyLoader,
            ICakeScriptService scriptService,
            ILoggerFactory loggerFactory)
        {
            _workspace      = workspace ?? throw new ArgumentNullException(nameof(workspace));
            _environment    = environment ?? throw new ArgumentNullException(nameof(environment));
            _assemblyLoader = assemblyLoader ?? throw new ArgumentNullException(nameof(assemblyLoader));
            _scriptService  = scriptService ?? throw new ArgumentNullException(nameof(scriptService));
            _logger         = loggerFactory?.CreateLogger <CakeProjectSystem>() ?? throw new ArgumentNullException(nameof(loggerFactory));

            _projects           = new Dictionary <string, ProjectInfo>();
            _compilationOptions = new Lazy <CSharpCompilationOptions>(CreateCompilationOptions);
        }
Пример #28
0
        public TestServiceProvider(IOmniSharpEnvironment environment, ILoggerFactory loggerFactory, ISharedTextWriter sharedTextWriter, IConfiguration configuration)
        {
            _logger = loggerFactory.CreateLogger <TestServiceProvider>();

            _services[typeof(IOptionsMonitor <OmniSharpOptions>)] = new OptionsMonitor <OmniSharpOptions>(
                new IConfigureOptions <OmniSharpOptions>[] {
                new ConfigureOptions <OmniSharpOptions>(c => ConfigurationBinder.Bind(configuration, c))
            },
                Enumerable.Empty <IOptionsChangeTokenSource <OmniSharpOptions> >()
                );

            _services[typeof(ILoggerFactory)]        = loggerFactory;
            _services[typeof(IOmniSharpEnvironment)] = environment;
            _services[typeof(IAssemblyLoader)]       = new AssemblyLoader(loggerFactory);
            _services[typeof(IMemoryCache)]          = new MemoryCache(new MemoryCacheOptions());
            _services[typeof(ISharedTextWriter)]     = sharedTextWriter;
        }
        public DotNetProjectSystem(
            IOmniSharpEnvironment environment,
            OmniSharpWorkspace workspace,
            IDotNetCliService dotNetCliService,
            MetadataFileReferenceCache metadataFileReferenceCache,
            IEventEmitter eventEmitter,
            IFileSystemWatcher fileSystemWatcher,
            ILoggerFactory loggerFactory)
        {
            _environment                = environment;
            _workspace                  = workspace;
            _dotNetCliService           = dotNetCliService;
            _metadataFileReferenceCache = metadataFileReferenceCache;
            _eventEmitter               = eventEmitter;
            _fileSystemWatcher          = fileSystemWatcher;
            _logger = loggerFactory.CreateLogger <DotNetProjectSystem>();

            _projectStates = new ProjectStatesCache(loggerFactory, _eventEmitter);
        }
Пример #30
0
        public FileSystemWatcherWrapper(IOmniSharpEnvironment env)
        {
            // Environment.SetEnvironmentVariable ("MONO_MANAGED_WATCHER", "1");
            _watcher = new FileSystemWatcher(env.TargetDirectory)
            {
                IncludeSubdirectories = true,
                EnableRaisingEvents   = true,
            };

            _watcher.Changed += OnChanged;
            _watcher.Created += OnChanged;
            _watcher.Deleted += OnChanged;

            _watcher.Renamed += (sender, e) =>
            {
                TriggerChange(e.OldFullPath);
                TriggerChange(e.FullPath);
            };
        }