对于我的硕士论文,我正在构建一个Visual Studio插件,该插件应该对当前打开的解决方案执行一些代码分析。
为此,我决定尝试使用corresponding nuget package来使用Roslyn。

一切正常(SyntaxTree用于导航代码,...),直到我尝试使用MSBuildWorkspace.Create().为止
最后一个调用导致以下异常:



我发现了这两个帖子:

  • Creating new Microsoft.CodeAnalysis.CustomWorkspace - got ReflectionTypeLoadException
  • MSBuildWorkspace.Create() throws exception

  • 从中我了解到我需要用于Visual Studio 14的MSBuild工具,该工具位于相关的iso中。

    我不想安装完整的Visual Studio 14,这也是因为我正在编写的插件应该在Visual Studio 2013下运行。从这两篇文章看来,我只能安装VS 14的这一部分。

    我的问题实际上是:如果我安装了适用于Visual Studio 14的MSBuild工具,当前正在处理的所有其他Visual Studio项目将如何处理?
    目前,他们使用Visual Studio 2013的MSBuild工具。是否仍然可以使用它?

    更新

    我正试图获得的是查找给定方法在项目内部是否具有引用。这个想法是按照this post进行的。

    最佳答案

    当您说要为Visual Studio构建插件时,如果您关心的只是获取当前打开的解决方案的工作空间(即用户正在编辑的代码),那么就永远不要使用MSBuildWorkspace。这是用于在Visual Studio外部加载内容的类型。如果您使用的是产品,则可以执行的操作是MEF [Import] Microsoft.VisualStudio.LanguageServices.VisualStudioWorkspace。这使您可以实时访问用户打开的内容,并避免完全运行MSBuild。

    请注意,您仍然需要谨慎选择要使用的引用程序集:如果您使用的是最新的NuGet程序包,因为它们的版本会有所不同(以及API,我们无法使用这些程序,所以它们将在版本上有所不同,但它们不起作用),内容),而不是上一次Visual Studio 2013预览中的内容。

    关于c# - 将Roslyn MSBuildWorkspace与Visual Studio 2013一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26323145/

    10-17 01:47