Document.WithSourceCodeKind(SourceCodeKind.Script)vs CSharpScript.Create

时间:2017-07-06 10:18:28

标签: c# roslyn roslyn-code-analysis

我正在开发一个脚本编辑器,可以提供代码完成和动态编译诊断。我开始使用CSharpScript.Create:

this._script = CSharpScript.Create<T>(sourceCode,ScriptOptions.Default,typeof(T));
diagnostics = this._script.Compile().ToList();

但注意到每次创建脚本时内存消耗都在增加(由源代码修改触发)。然后我看着使用Document:

this.Document = this.Workspace
    .AddProject("TestProject", LanguageNames.CSharp)
    .WithMetadataReferences(...)
    .AddDocument("", "")
    .WithSourceCodeKind(SourceCodeKind.Script);

diagnostics=this.Document.WithText(SourceText.From(sourceCode)).GetSemanticModelAsync()
    .Result.GetDiagnostics().ToList()

内存消耗仍然很低但我不知道如何使用CSharpScript.Create轻松传递全局变量信息。脚本中对全局变量的任何引用都会触发CS0103错误 - &#34;名称&#39;&#39;在当前上下文中不存在&#34;。

文档是否可以传递全局变量类型信息?

我们如何执行这样的文档/脚本? (目前我正在使用CSharpScript.Create来编译和执行代码,而Workspace / Document则用于提供代码完成)。

0 个答案:

没有答案