使用Roslyn创建诊断分析器时丢失包

时间:2014-10-28 17:39:40

标签: c# roslyn

澄清:我正在使用Visual Studio 2013 Ultimate,Update 2

我正在尝试使用Roslyn创建诊断分析器。

诊断分析器的示例代码(位于here以这种方式声明了这样的分析器:

[DiagnosticAnalyzer(LanguageNames.CSharp)]
internal class DiagnosticAnalyzer : Microsoft.CodeAnalysis.Diagnostics.DiagnosticAnalyzer

但是当我尝试重新创建时,我在DiagnosticAnalyzer中找不到类Microsoft.CodeAnalysis.Diagnostics(但IDiagnosticAnalyzer确实存在于同一名称空间中。)

StackOverflow上的一些示例改为使用(例如this one

[DiagnosticAnalyzer]
[ExportDiagnosticAnalyzer(DiagnosticId, LanguageNames.CSharp)]
internal class DiagnosticAnalyzer : ISyntaxTreeAnalyzer

但是在这种情况下,我找不到ExportDiagnosticAnalyzer属性。好像我错过了一个集会。使用NuGet我已经安装了以下软件包:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.Bcl.Immutable" version="1.1.20-beta" targetFramework="net45" />
  <package id="Microsoft.Bcl.Metadata" version="1.0.12-alpha" targetFramework="net45" />
  <package id="Microsoft.CodeAnalysis" version="0.7.4091001-beta" targetFramework="net45" />
  <package id="Microsoft.CodeAnalysis.Common" version="0.7.4091001-beta" targetFramework="net45" />
  <package id="Microsoft.CodeAnalysis.CSharp" version="0.7.4091001-beta" targetFramework="net45" />
  <package id="Microsoft.CodeAnalysis.CSharp.Workspaces" version="0.7.4091001-beta" targetFramework="net45" />
  <package id="Microsoft.CodeAnalysis.VisualBasic" version="0.7.4091001-beta" targetFramework="net45" />
  <package id="Microsoft.CodeAnalysis.VisualBasic.Workspaces" version="0.7.4091001-beta" targetFramework="net45" />
  <package id="Microsoft.CodeAnalysis.Workspaces.Common" version="0.7.4091001-beta" targetFramework="net45" />
</packages>

据我所知,从样本中检查packages.config,应该是我需要的一切。

当我检查我的C#项目的引用时,我引用了以下非标准程序集:

  • Microsoft.CodeAnalysis
  • Microsoft.CodeAnalysis.CSharp
  • Microsoft.CodeAnalysis.CSharp.Desktop
  • Microsoft.CodeAnalysis.CSharp.Workspaces
  • Microsoft.CodeAnalysis.Desktop
  • Microsoft.CodeAnalysisWorkspaces
  • Microsoft.CSharp

我的问题是,我错过了什么,我找不到创建诊断分析仪所需的所有类?

2 个答案:

答案 0 :(得分:4)

所以一两个月前我们完全改变了用于分析器的API。 (别担心,这是值得的麻烦:新的API是很多更好。)当你在CodePlex中查看当前的源代码时,你会看到一些如此新的东西,我们还没有在NuGet上发货。我强烈建议你使用Visual Studio“14”CTP并下载模板以匹配它,这将使你在一个应该工作的地方。尝试使用当前的NuGet包来反对旧的预览会导致悲伤。

ExportDiagnosticAnalyzer已过时,[DiagnosticAnalyzer]属性现已足够。

答案 1 :(得分:1)

VS 2013不再接收Visual Studio和Roslyn之间的接口更新。仍然可以使用VS 2013,但您必须使用NuGet package的旧版本。

Install-Package Microsoft.CodeAnalysis -Version 0.6.4033103-beta -Pre

如果使用上述内容,则存在许多缺点。相应的文档/样本可能不再存在,Roslyn Reference源可能会有微妙的不同。

正如杰森所说,简单地转移到VS 14可能更容易。当然,这可能会阻止您在组织内使用诊断程序,直到VS 14发布(日期仍未公开)。