internal static int Main(string[] args) { try { // Note that AppContext.BaseDirectory isn't necessarily the directory containing csi.exe. // For example, when executed via corerun it's the directory containing corerun. string csiDirectory = Path.GetDirectoryName(typeof(Csi).GetTypeInfo().Assembly.ManifestModule.FullyQualifiedName); var buildPaths = new BuildPaths( clientDir: csiDirectory, workingDir: Directory.GetCurrentDirectory(), sdkDir: RuntimeMetadataReferenceResolver.GetDesktopFrameworkDirectory(), tempDir: Path.GetTempPath()); var compiler = new CSharpInteractiveCompiler( responseFile: Path.Combine(csiDirectory, InteractiveResponseFileName), buildPaths: buildPaths, args: args, analyzerLoader: new NotImplementedAnalyzerLoader()); var runner = new CommandLineRunner( ConsoleIO.Default, compiler, CSharpScriptCompiler.Instance, CSharpObjectFormatter.Instance); return(runner.RunInteractive()); } catch (Exception ex) { Console.Error.WriteLine(ex.ToString()); return(1); } }
private Service(Func <Func <object>, object> invokeOnMainThread) { _invokeOnMainThread = invokeOnMainThread; // The initial working directory is set when the process is created. var workingDirectory = Directory.GetCurrentDirectory(); var referenceResolver = new RuntimeMetadataReferenceResolver( searchPaths: ImmutableArray <string> .Empty, baseDirectory: workingDirectory, packageResolver: null, gacFileResolver: s_currentPlatformInfo.HasGlobalAssemblyCache ? new GacFileResolver(preferredCulture: CultureInfo.CurrentCulture) : null, s_currentPlatformInfo.PlatformAssemblyPaths, (path, properties) => new ShadowCopyReference(GetServiceState().MetadataFileProvider, path, properties)); var initialState = new EvaluationState( scriptState: null, scriptOptions: ScriptOptions.Default.WithMetadataResolver(new ScriptMetadataResolver(referenceResolver)), ImmutableArray <string> .Empty, workingDirectory); _lastTask = Task.FromResult(initialState); Console.OutputEncoding = Encoding.UTF8; // We want to be sure to delete the shadow-copied files when the process goes away. Frankly // there's nothing we can do if the process is forcefully quit or goes down in a completely // uncontrolled manner (like a stack overflow). When the process goes down in a controlled // manned, we should generally expect this event to be called. AppDomain.CurrentDomain.ProcessExit += HandleProcessExit; }
public static InteractiveHostPlatformInfo GetCurrentPlatformInfo() => new InteractiveHostPlatformInfo( RuntimeMetadataReferenceResolver .GetTrustedPlatformAssemblyPaths() .Where(IsNotHostAssembly) .ToImmutableArray(), GacFileResolver.IsAvailable );
/// <summary> /// Creates a new <see cref="ScriptOptions"/> with <see cref="MetadataResolver"/> set to the default metadata resolver for the current platform. /// </summary> /// <param name="searchPaths">Directories to be used by the default resolver when resolving assembly file names.</param> /// <remarks> /// The default resolver looks up references in specified <paramref name="searchPaths"/>, in NuGet packages and in Global Assembly Cache (if available on the current platform). /// </remarks> public ScriptOptions WithDefaultMetadataResolution(ImmutableArray <string> searchPaths) { var resolver = new RuntimeMetadataReferenceResolver( ToImmutableArrayChecked(searchPaths, nameof(searchPaths)), baseDirectory: null); return(new ScriptOptions(this) { MetadataResolver = resolver }); }
public void Resolve() { using (var directory = new DisposableDirectory(Temp)) { var assembly1 = directory.CreateFile("_1.dll"); var assembly2 = directory.CreateFile("_2.dll"); // With NuGetPackageResolver. var resolver = new RuntimeMetadataReferenceResolver( new RelativePathResolver(ImmutableArray.Create(directory.Path), baseDirectory: directory.Path), new PackageResolver(ImmutableDictionary <string, ImmutableArray <string> > .Empty.Add("nuget:N/1.0", ImmutableArray.Create(assembly1.Path, assembly2.Path))), gacFileResolver: null, useCoreResolver: false); // Recognized NuGet reference. var actualReferences = resolver.ResolveReference("nuget:N/1.0", baseFilePath: null, properties: MetadataReferenceProperties.Assembly); AssertEx.SetEqual(actualReferences.SelectAsArray(r => r.FilePath), assembly1.Path, assembly2.Path); // Unrecognized NuGet reference. actualReferences = resolver.ResolveReference("nuget:N/2.0", baseFilePath: null, properties: MetadataReferenceProperties.Assembly); Assert.True(actualReferences.IsEmpty); // Recognized file path. actualReferences = resolver.ResolveReference("_2.dll", baseFilePath: null, properties: MetadataReferenceProperties.Assembly); AssertEx.SetEqual(actualReferences.SelectAsArray(r => r.FilePath), assembly2.Path); // Unrecognized file path. actualReferences = resolver.ResolveReference("_3.dll", baseFilePath: null, properties: MetadataReferenceProperties.Assembly); Assert.True(actualReferences.IsEmpty); // Without NuGetPackageResolver. resolver = new RuntimeMetadataReferenceResolver( new RelativePathResolver(ImmutableArray.Create(directory.Path), baseDirectory: directory.Path), packageResolver: null, gacFileResolver: null, useCoreResolver: false); // Unrecognized NuGet reference. actualReferences = resolver.ResolveReference("nuget:N/1.0", baseFilePath: null, properties: MetadataReferenceProperties.Assembly); Assert.True(actualReferences.IsEmpty); // Recognized file path. actualReferences = resolver.ResolveReference("_2.dll", baseFilePath: null, properties: MetadataReferenceProperties.Assembly); AssertEx.SetEqual(actualReferences.SelectAsArray(r => r.FilePath), assembly2.Path); // Unrecognized file path. actualReferences = resolver.ResolveReference("_3.dll", baseFilePath: null, properties: MetadataReferenceProperties.Assembly); Assert.True(actualReferences.IsEmpty); } }
public void Resolve() { using (var directory = new DisposableDirectory(Temp)) { var assembly1 = directory.CreateFile("_1.dll"); var assembly2 = directory.CreateFile("_2.dll"); // With NuGetPackageResolver. var resolver = new RuntimeMetadataReferenceResolver( new RelativePathResolver(ImmutableArray.Create(directory.Path), baseDirectory: directory.Path), new PackageResolver(ImmutableDictionary<string, ImmutableArray<string>>.Empty.Add("nuget:N/1.0", ImmutableArray.Create(assembly1.Path, assembly2.Path))), gacFileResolver: null, useCoreResolver: false); // Recognized NuGet reference. var actualReferences = resolver.ResolveReference("nuget:N/1.0", baseFilePath: null, properties: MetadataReferenceProperties.Assembly); AssertEx.SetEqual(actualReferences.SelectAsArray(r => r.FilePath), assembly1.Path, assembly2.Path); // Unrecognized NuGet reference. actualReferences = resolver.ResolveReference("nuget:N/2.0", baseFilePath: null, properties: MetadataReferenceProperties.Assembly); Assert.True(actualReferences.IsEmpty); // Recognized file path. actualReferences = resolver.ResolveReference("_2.dll", baseFilePath: null, properties: MetadataReferenceProperties.Assembly); AssertEx.SetEqual(actualReferences.SelectAsArray(r => r.FilePath), assembly2.Path); // Unrecognized file path. actualReferences = resolver.ResolveReference("_3.dll", baseFilePath: null, properties: MetadataReferenceProperties.Assembly); Assert.True(actualReferences.IsEmpty); // Without NuGetPackageResolver. resolver = new RuntimeMetadataReferenceResolver( new RelativePathResolver(ImmutableArray.Create(directory.Path), baseDirectory: directory.Path), packageResolver: null, gacFileResolver: null, useCoreResolver: false); // Unrecognized NuGet reference. actualReferences = resolver.ResolveReference("nuget:N/1.0", baseFilePath: null, properties: MetadataReferenceProperties.Assembly); Assert.True(actualReferences.IsEmpty); // Recognized file path. actualReferences = resolver.ResolveReference("_2.dll", baseFilePath: null, properties: MetadataReferenceProperties.Assembly); AssertEx.SetEqual(actualReferences.SelectAsArray(r => r.FilePath), assembly2.Path); // Unrecognized file path. actualReferences = resolver.ResolveReference("_3.dll", baseFilePath: null, properties: MetadataReferenceProperties.Assembly); Assert.True(actualReferences.IsEmpty); } }
private static CompilationOptions GetCompilationOptionsWithScriptReferenceResolvers(HostWorkspaceServices services, CompilationOptions compilationOptions, string filePath) { var metadataService = services.GetRequiredService <IMetadataService>(); var baseDirectory = PathUtilities.GetDirectoryName(filePath); // TODO (https://github.com/dotnet/roslyn/issues/5325, https://github.com/dotnet/roslyn/issues/13886): // - Need to have a way to specify these somewhere in VS options. // - Add default namespace imports, default metadata references to match csi.rsp // - Add default script globals available in 'csi goo.csx' environment: CommandLineScriptGlobals var referenceResolver = RuntimeMetadataReferenceResolver.CreateCurrentPlatformResolver( searchPaths: ImmutableArray.Create(RuntimeEnvironment.GetRuntimeDirectory()), baseDirectory: baseDirectory, fileReferenceProvider: (path, properties) => metadataService.GetReference(path, properties)); return(compilationOptions .WithMetadataReferenceResolver(referenceResolver) .WithSourceReferenceResolver(new SourceFileResolver(searchPaths: ImmutableArray <string> .Empty, baseDirectory))); }
internal ScriptMetadataResolver(RuntimeMetadataReferenceResolver resolver) { _resolver = resolver; }
private IList <TestHostProject> CreateSubmissions( IEnumerable <XElement> submissionElements, ExportProvider exportProvider) { var submissions = new List <TestHostProject>(); var submissionIndex = 0; foreach (var submissionElement in submissionElements) { var submissionName = "Submission" + (submissionIndex++); var languageName = GetLanguage(this, submissionElement); // The document var markupCode = submissionElement.NormalizedValue(); MarkupTestFile.GetPositionAndSpans(markupCode, out var code, out var cursorPosition, out IDictionary <string, ImmutableArray <TextSpan> > spans); var languageServices = Services.GetLanguageServices(languageName); // The project var document = new TestHostDocument(exportProvider, languageServices, code, submissionName, submissionName, cursorPosition, spans, SourceCodeKind.Script); var documents = new List <TestHostDocument> { document }; if (languageName == NoCompilationConstants.LanguageName) { submissions.Add( new TestHostProject( languageServices, compilationOptions: null, parseOptions: null, assemblyName: submissionName, projectName: submissionName, references: null, documents: documents, isSubmission: true)); continue; } var metadataService = Services.GetService <IMetadataService>(); var metadataResolver = RuntimeMetadataReferenceResolver.CreateCurrentPlatformResolver(fileReferenceProvider: metadataService.GetReference); var syntaxFactory = languageServices.GetService <ISyntaxTreeFactoryService>(); var compilationFactory = languageServices.GetService <ICompilationFactoryService>(); var compilationOptions = compilationFactory.GetDefaultCompilationOptions() .WithOutputKind(OutputKind.DynamicallyLinkedLibrary) .WithMetadataReferenceResolver(metadataResolver); var parseOptions = syntaxFactory.GetDefaultParseOptions().WithKind(SourceCodeKind.Script); var references = CreateCommonReferences(this, submissionElement); var project = new TestHostProject( languageServices, compilationOptions, parseOptions, submissionName, submissionName, references, documents, isSubmission: true); submissions.Add(project); } return(submissions); }
private ScriptMetadataResolver(ImmutableArray <string> searchPaths, string baseDirectoryOpt) { _resolver = new RuntimeMetadataReferenceResolver(searchPaths, baseDirectoryOpt); }