示例#1
0
 public SimpleCompletionProvider(ScriptCs.ScriptServices service, ICSharpCode.AvalonEdit.Document.TextDocument text)
 {
     this._service = service;
     this.text     = text;
     eProvider     = new EnumProvider();
     sProvider     = new StaticProvider();
 }
        public CompletionProvider(ScriptCs.ScriptServices service, ICSharpCode.AvalonEdit.Document.TextDocument text)
        {
            _simp = new SimpleCompletionProvider(service, text);

            var currentPath = Assembly.GetExecutingAssembly().Location;

            currentPath = Path.GetDirectoryName(currentPath);
            var f1 = Path.Combine(currentPath, "Microsoft.CodeAnalysis.Features.dll");
            var f2 = Path.Combine(currentPath, "Microsoft.CodeAnalysis.CSharp.Features");
            var f3 = Path.Combine(currentPath, "Microsoft.CodeAnalysis.Workspaces.Desktop");

            if (!File.Exists(f1))
            {
                File.WriteAllBytes(f1, Resources.Microsoft_CodeAnalysis_Features);
            }
            if (!File.Exists(f2))
            {
                File.WriteAllBytes(f2, Resources.Microsoft_CodeAnalysis_CSharp_Features);
            }
            if (!File.Exists(f3))
            {
                File.WriteAllBytes(f3, Resources.Microsoft_CodeAnalysis_Workspaces_Desktop);
            }

            _host = MefHostServices.Create(MefHostServices.DefaultAssemblies.Concat(new[]
            {
                Assembly.LoadFrom(f1),
                Assembly.LoadFrom(f2)
            }));

            _ws = new InteractiveWorkspace(_host);


            _parseOptions = new CSharpParseOptions(kind: SourceCodeKind.Interactive);

            _references = _assemblyTypes.Select(t =>
                                                MetadataReference.CreateFromAssembly(t.Assembly)).ToArray();
            _compilationOptions = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary,
                                                               usings: _assemblyTypes.Select(x => x.Namespace).ToImmutableArray());

            var container = new CompositionContainer(new AssemblyCatalog(typeof(ISignatureHelpProvider).Assembly),
                                                     CompositionOptions.DisableSilentRejection | CompositionOptions.IsThreadSafe);

            _signatureHelpProviders = container.GetExportedValues <ISignatureHelpProvider>().ToArray();
        }