答案很簡單:沒有合理的方式與羅斯林API來做到這一點
龍答:
,因爲它是目前實現的API只允許分析器知道的事情當前編譯(Visual Studio中的項目)。如果您從分析儀中的Initalize
方法中調用RegisterCompilationAction
,您將能夠查看編譯中的所有符號。
爲什麼分析儀不能看到整個解決方案的範圍?最簡單的答案是:因爲編譯器不能,分析器在編譯器內運行。這樣做是爲了使分析器可以在不安裝Visual Studio的情況下在連續集成服務器上運行。 MSBuild讀取解決方案文件,然後爲每個項目調用一次編譯器。編譯器從來不知道項目依賴關係,編譯器團隊不想參與該項業務,他們很樂意將其留給MSBuild。
人們試圖通過使用MSBuildWorkspace
加載他們的解決方案來解決此問題,並嘗試以這種方式查看跨項目的文檔。這會偶爾失敗,因爲MSBuildWorkspace
不是線程安全的。它也會導致內存使用量猛增。人們試圖緩存MSBuildWorkspace
實例來部分解決這個問題,但是每次創建新的編譯時(主要是在除了最微不足道的變化的情況下)都需要使緩存失效。基本上,沿着這條道路往往充滿痛苦,而且沒有得到支持。
有足夠多的人要求這個功能,我們認爲我們最終需要做的事情。今天沒有合理的方法來實現它,除非你願意編寫一個導入Visual Studio工作區並試圖運行自己的分析引擎的Visual Studio擴展。請在https://github.com/dotnet/roslyn
上提出功能請求謝謝你的答案!那麼,這對我來說是不幸的。然後,我會嘗試爲Visual Studio編寫擴展。你能推薦關於這個話題的任何文章/文獻嗎? –
有用於寫入VS擴展的[extend-vs](https://github.com/Microsoft/VSSDK-Extensibility-Samples)示例。我會看Josh Varty的[博客文章](https://joshvarty.wordpress.com/2014/09/12/learn-roslyn-now-part-6-working-with-workspaces/)和[videos](https ://www.youtube.com/watch?v = 35BFJt91rxY&list = PLxk7xaZWBdUT23QfaQTCJDG6Q1xx6uHdG&index = 7)關於如何獲取[VisualStudioWorkspace](http://source.roslyn.io/#Microsoft.VisualStudio。LanguageServices/Implementation/ProjectSystem/VisualStudioWorkspace.cs) –
非常感謝! –