public ScriptContext(ScriptProjectProvider scriptProjectProvider, HashSet <MetadataReference> metadataReferences, CompilationDependency[] compilationDependencies, Type globalsType) { ScriptProjectProvider = scriptProjectProvider; MetadataReferences = metadataReferences; CompilationDependencies = compilationDependencies; GlobalsType = globalsType; }
public ScriptContext(ScriptProjectProvider scriptProjectProvider, HashSet <MetadataReference> metadataReferences, HashSet <string> assemblyReferences, CompilationDependency[] compilationDependencies) { ScriptProjectProvider = scriptProjectProvider; MetadataReferences = metadataReferences; AssemblyReferences = assemblyReferences; CompilationDependencies = compilationDependencies; }
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); }
public ScriptContext CreateScriptContext(ScriptOptions scriptOptions) { var currentDomainAssemblies = AppDomain.CurrentDomain.GetAssemblies(); // explicitly inherit scripting library references to all global script object (CommandLineScriptGlobals) to be recognized var inheritedCompileLibraries = currentDomainAssemblies.Where(x => x.FullName.StartsWith("microsoft.codeanalysis", StringComparison.OrdinalIgnoreCase)).ToList(); // explicitly include System.ValueTuple inheritedCompileLibraries.AddRange(currentDomainAssemblies.Where(x => x.FullName.StartsWith("system.valuetuple", StringComparison.OrdinalIgnoreCase))); CompilationDependency[] compilationDependencies = null; try { _logger.LogInformation($"Searching for compilation dependencies with the fallback framework of '{scriptOptions.DefaultTargetFramework}'."); compilationDependencies = _compilationDependencyResolver.GetDependencies(_env.TargetDirectory, scriptOptions.IsNugetEnabled(), scriptOptions.DefaultTargetFramework).ToArray(); } catch (Exception e) { _logger.LogError("Failed to resolve compilation dependencies", e); compilationDependencies = Array.Empty <CompilationDependency>(); } var metadataReferences = new HashSet <MetadataReference>(MetadataReferenceEqualityComparer.Instance); var assemblyReferences = new HashSet <string>(); var isDesktopClr = true; // if we have no compilation dependencies // we will assume desktop framework // and add default CLR references // same applies for having a context that is not a .NET Core app if (!compilationDependencies.Any()) { _logger.LogInformation("Unable to find dependency context for CSX files. Will default to non-context usage (Desktop CLR scripts)."); AddDefaultClrMetadataReferences(metadataReferences, assemblyReferences); } else { isDesktopClr = false; HashSet <string> loadedFiles = new HashSet <string>(StringComparer.OrdinalIgnoreCase); foreach (var compilationAssembly in compilationDependencies.SelectMany(cd => cd.AssemblyPaths).Distinct()) { if (loadedFiles.Add(Path.GetFileName(compilationAssembly))) { _logger.LogDebug("Discovered script compilation assembly reference: " + compilationAssembly); AddMetadataReference(metadataReferences, assemblyReferences, compilationAssembly); } } } // inject all inherited assemblies foreach (var inheritedCompileLib in inheritedCompileLibraries) { _logger.LogDebug("Adding implicit reference: " + inheritedCompileLib); AddMetadataReference(metadataReferences, assemblyReferences, inheritedCompileLib.Location); } var scriptProjectProvider = new ScriptProjectProvider(scriptOptions, _env, _loggerFactory, isDesktopClr); return(new ScriptContext(scriptProjectProvider, metadataReferences, assemblyReferences, compilationDependencies, _defaultGlobalsType)); }