使用 Roslyn 获取 .cs 以外的文件

Get other files than .cs with Roslyn

我想用 Roslyn 查找方法的用法。我设法通过 .cs 文件中的代码使用来做到这一点。此外,我想分析解决方案中包含的 JavaScript 个文件。我知道 Roslyn 无法分析 JavaScript 的语法或语义,所以我只想在所有 .js 文件中搜索我的方法名称的 textural occurrencies

我像这样检索所有文件(文档):

foreach (Project pr in solution.Projects)
{
    foreach (Document doc in pr.Documents)
    {
      // my js-file is not included
    }
}

但是 Documents 只包含 .cs 个文件。有没有办法同时获取 .js 文件,或者我是否必须使用 project.FilePath 获取文件夹并使用旧的 File API 获取文件,这可能会导致问题,因为不一定是所有文件该文件夹必须已添加到项目等?

编辑:
另外 AdditionalFiles 不包含任何文件。

您需要使用 Project.AdditionalDocuments:

foreach (Project pr in solution.Projects) {
    foreach (TextDocument doc in pr.AdditionalDocuments) {
      // doc is a non-csharp TextDocument object.
    }
}

更新

要使用以上内容,您必须确保目标项目中的文件将其构建操作设置为 AdditionalFiles。目前没有好的方法可以在目标项目中使用这种类型的构建操作生成文件,因此您目前只能依靠代码的用户手动创建文件的存根,点击 F4文件属性并将其构建操作更改为 AdditionalFiles,之后您的扩展程序将能够获取它。