2017-11-14 21 views
0

私はRoslynCodeEditorコントロールを使って作業していて、グローバルオブジェクトをRoslynCodeEditorに渡し、スクリプト内にインテリセンスを持たせる方法を見つけようとしています。RoslynPad RoslynCodeEditorコントロールのglobalsTypeグローバルオブジェクトにintellisenseを含めることは可能ですか?

RoslynCodeEditorコントロールを使用してスクリプトを編集するときに、コンテキストオブジェクトのプロパティまたはメソッドへのアクセスをどのように許可することができますか?

MyContext context = new MyContext(); 
context.Data = data; 
ScriptOptions scriptOptions = ScriptOptions.Default; 
scriptOptions = scriptOptions.WithReferences(ReferencesAndImports.References); 
scriptOptions = scriptOptions.WithImports(ReferencesAndImports.Imports); 
var scriptState = await CSharpScript.EvaluateAsync<string>("int i = 0;", scriptOptions, context, typeof(MyContext)); 

答えて

3

デザイン時コンパイルにグローバルタイプを追加する必要があります。これを行うには、カスタムRoslynHost(アップバージョン2.4でサポートされていると)必要があります。

public class CustomRoslynHost : RoslynHost 
{ 
    protected override Project CreateProject(Solution solution, DocumentCreationArgs args, CompilationOptions compilationOptions, Project previousProject = null) 
    { 
     var name = args.Name ?? "Program"; 
     var id = ProjectId.CreateNewId(name); 

     var parseOptions = new CSharpParseOptions(kind: SourceCodeKind.Script, languageVersion: LanguageVersion.Latest); 

     compilationOptions = compilationOptions.WithScriptClassName(name); 

     solution = solution.AddProject(ProjectInfo.Create(
      id, 
      VersionStamp.Create(), 
      name, 
      name, 
      LanguageNames.CSharp, 
      isSubmission: true, 
      parseOptions: parseOptions, 
      hostObjectType: typeof(MyContext), 
      compilationOptions: compilationOptions, 
      metadataReferences: previousProject != null ? ImmutableArray<MetadataReference>.Empty : DefaultReferences, 
      projectReferences: previousProject != null ? new[] { new ProjectReference(previousProject.Id) } : null)); 

     var project = solution.GetProject(id); 

     return project; 
    } 
} 

が続いタイプが常駐アセンブリへの参照を追加する例:

new CutomRoslynHost(
    references: RoslynHostReferences.Default.With(
     typeNamespaceImports: new[] { typeof(MyContext) }), 
    additionalAssemblies: ...); 
関連する問題