2016-09-07 59 views
0

我试图从编辑器中的当前活动文档生成一个程序集文件(Dll)。如何在Visual Studio项目中使用DTE/DTE2读取活动文档的源代码

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

+0

你通常不能这样做。 (如果这些文件取决于彼此,怎么办?什么参考文献/项目设置/构建步骤?) – SLaks

+0

一般来说,除非类完全独立,否则这将不起作用。 –

+0

谢谢,如果我可以使用Roslyn API - CSharpCompilation并链接此源在创建编译单元时使用的所有引用? –

回答

0

你可以用下面的代码将当前文档的文本:

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

忽略有关“可能不工作”的关注了一下,而不是获取文本,得到的实际语法树Roslyn API,然后构建你的编译。你可以从VisualStudioWorkspace或其他地方得到它。这意味着你不必自己重新分析文件,如果用户有#if指令和其他东西,这可能会非常棘手。您也可以从工作区API获取SourceText,如果您需要重新分析,那么您可以直接返回到解析器,但这比重构字符串更有效。

+0

感谢Jason,有没有关于如何实现这个的任何示例源? –

+0

有几种不同的方式来做到这一点,取决于你的开始。你想要建立什么? –

+0

我有要求使用Roslyn API编译当前源文档 –

相关问题