如何在visual studio项目中使用DTE / DTE2读取活动文档的源代码

时间:2016-09-07 12:15:57

标签: visual-studio-2015 roslyn envdte

我正在尝试从编辑器中的当前活动文档生成一个程序集文件(Dll)。

实施例。我有3个C#源文件 - file1.cs,file2.cs,file3.cs,如果我当前在编辑器中打开了file2.cs。我需要使用Roslyn编译器API为单个文件file2.dll构建一个程序集Dll。

3 个答案:

答案 0 :(得分:0)

您可以使用以下代码获取当前文档文本:

EnvDTE.TextDocument textDocument = (EnvDTE.TextDocument)DTE.ActiveDocument.Object("TextDocument");
EnvDTE.EditPoint editPoint = textDocument.StartPoint.CreateEditPoint();
string result = editPoint.GetText(textDocument.EndPoint);

答案 1 :(得分:0)

暂时忽略对“可能不起作用”的担忧,而不是获取文本,从Roslyn API获取实际的语法树,然后使用它构建编译。您可以从VisualStudioWorkspace或其他地方获取。这意味着您不必自己重新解析文件,如果用户有#if指令和其他内容,这可能很棘手。您也可以从工作空间API获取SourceText,如果您需要重新分析,可以直接将其返回到我们的解析器,但这比重建字符串要高效得多。

答案 2 :(得分:0)

DTE2 dte2 = Package.GetGlobalService(typeof(DTE)) as DTE2;
   
Document active = dte2.ActiveDocument;
TextDocument textDocument = (TextDocument)dte2.ActiveDocument.Object();

EditPoint endPoint = textDocument.EndPoint.CreateEditPoint();
string content = endPoint.GetLines(1, textDocument.EndPoint.Line + 1);