我试图从编辑器中的当前活动文档生成一个程序集文件(Dll)。如何在Visual Studio项目中使用DTE/DTE2读取活动文档的源代码
Ex。我有3个C#源文件 - file1.cs,file2.cs,file3.cs,如果我当前在编辑器中打开了file2.cs。我需要仅使用Roslyn编译器API为单个文件file2.dll构建一个程序集Dll。
我试图从编辑器中的当前活动文档生成一个程序集文件(Dll)。如何在Visual Studio项目中使用DTE/DTE2读取活动文档的源代码
Ex。我有3个C#源文件 - file1.cs,file2.cs,file3.cs,如果我当前在编辑器中打开了file2.cs。我需要仅使用Roslyn编译器API为单个文件file2.dll构建一个程序集Dll。
你可以用下面的代码将当前文档的文本:
EnvDTE.TextDocument textDocument = (EnvDTE.TextDocument)DTE.ActiveDocument.Object("TextDocument");
EnvDTE.EditPoint editPoint = textDocument.StartPoint.CreateEditPoint();
string result = editPoint.GetText(textDocument.EndPoint);
忽略有关“可能不工作”的关注了一下,而不是获取文本,得到的实际语法树Roslyn API,然后构建你的编译。你可以从VisualStudioWorkspace
或其他地方得到它。这意味着你不必自己重新分析文件,如果用户有#if指令和其他东西,这可能会非常棘手。您也可以从工作区API获取SourceText,如果您需要重新分析,那么您可以直接返回到解析器,但这比重构字符串更有效。
感谢Jason,有没有关于如何实现这个的任何示例源? –
有几种不同的方式来做到这一点,取决于你的开始。你想要建立什么? –
我有要求使用Roslyn API编译当前源文档 –
你通常不能这样做。 (如果这些文件取决于彼此,怎么办?什么参考文献/项目设置/构建步骤?) – SLaks
一般来说,除非类完全独立,否则这将不起作用。 –
谢谢,如果我可以使用Roslyn API - CSharpCompilation并链接此源在创建编译单元时使用的所有引用? –