我正在尝试从编辑器中的当前活动文档生成一个程序集文件(Dll)。
实施例。我有3个C#源文件 - file1.cs,file2.cs,file3.cs,如果我当前在编辑器中打开了file2.cs。我需要使用Roslyn编译器API为单个文件file2.dll构建一个程序集Dll。
答案 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);