2016-09-07 57 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編譯當前源文檔 –

相關問題