public void InitializeFileTracking(FileChangeWatcher fileChangeWatcher) { lock (_gate) { if (_fileChangeContext == null) { ImmutableArray <string> includes; try { includes = RuleSet.GetEffectiveIncludesFromFile(FilePath); } catch (Exception e) { // We couldn't read the rule set for whatever reason. Capture the exception // so we can surface the error later, and subscribe to file change notifications // so that we'll automatically reload the file if the user can fix the issue. _optionsRead = true; _specificDiagnosticOptions = ImmutableDictionary <string, ReportDiagnostic> .Empty; _exception = e; includes = ImmutableArray.Create(FilePath); } _fileChangeContext = fileChangeWatcher.CreateContext(); _fileChangeContext.FileChanged += IncludeUpdated; foreach (var include in includes) { _fileChangeContext.EnqueueWatchingFile(include); } } } }
public PortableExecutableReference CreateReferenceAndStartWatchingFile(string fullFilePath, MetadataReferenceProperties properties) { lock (_gate) { var reference = _visualStudioWorkspace.Value.CreatePortableExecutableReference(fullFilePath, properties); var fileWatchingToken = _fileReferenceChangeContext.EnqueueWatchingFile(fullFilePath); _metadataReferenceFileWatchingTokens.Add(reference, fileWatchingToken); return(reference); } }