澄清:我正在使用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#项目的引用时,我引用了以下非标准程序集:
我的问题是,我错过了什么,我找不到创建诊断分析仪所需的所有类?
答案 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发布(日期仍未公开)。