相关疑难解决方法(0)

使用Roslyn查找对方法的所有引用

我正在寻找一组.cs文件来查看哪些调用a的Value属性Nullable<T>(查找所有引用).例如,这将匹配:

class Program
{
    static void Main()
    {
        int? nullable = 123;
        int value = nullable.Value;
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现了Roslyn并查看了一些样本,但其中许多已经过时且API非常庞大.我该怎么做呢?

解析语法树后我陷入困境.这是我到目前为止:

public static void Analyze(string sourceCode)
{
    var tree = CSharpSyntaxTree.ParseText(sourceCode);

    tree./* ??? What goes here? */
}
Run Code Online (Sandbox Code Playgroud)

c# code-analysis findall roslyn

19
推荐指数
1
解决办法
1万
查看次数

如何通过扩展方法,静态类中的方法以及使用Roslyn的ref/out参数的方法来访问调用

我正在创建一个用于创建.NET UML Sequence Diagrams的开源项目,该项目利用了一个名为js-sequence-diagrams的javascript库.我不确定Roslyn是否适合这项工作,但我认为我会试一试,所以我总结了一些概念验证代码,它试图获取所有方法及其调用,然后以一种形式输出这些调用.可以用js-sequence-diagrams来解释.

代码生成一些输出,但它不捕获所有内容.我似乎无法通过扩展方法捕获调用,静态类中的静态方法的调用.

我确实看到了带out参数的方法调用,但没有以任何形式扩展BaseMethodDeclarationSyntax

这是代码(请记住,这是概念代码的证明,所以我没有完全遵循最佳实践,但我不是在这里请求代码审查...另外,我习惯使用任务所以我在搞乱等待,但我不完全确定我正在使用它)

https://gist.github.com/SoundLogic/11193841

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection.Emit;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Formatting;
using Microsoft.CodeAnalysis.MSBuild;
using Microsoft.CodeAnalysis.FindSymbols;
using System.Collections.Immutable;

namespace Diagrams
{
    class Program
    {
        static void Main(string[] args)
        {
            string solutionName = "Diagrams";
            string solutionExtension = ".sln";
            string solutionFileName = solutionName + solutionExtension;
            string rootPath = @"C:\Workspace\";
            string solutionPath = rootPath + solutionName + @"\" + solutionFileName;

            MSBuildWorkspace workspace = MSBuildWorkspace.Create(); …
Run Code Online (Sandbox Code Playgroud)

.net c# roslyn

6
推荐指数
1
解决办法
860
查看次数

使用Roslyn语义模型在单个.cs文件中查找符号

我正在使用Roslyn创建一个分析器,当特定类以不同步的方式暴露其字段时,该分析器会警告用户,以帮助防止竞争条件.

问题:

我目前有工作代码检查以确保字段是私有的.我遇到了最后一块拼图的麻烦:找出一种方法来确保所有字段只能在一个锁定块内访问,因此它们(表面上)是同步的.

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Threading;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.FindSymbols;

namespace RaceConditions
{
    [DiagnosticAnalyzer(LanguageNames.CSharp)]
    public class UnsynchronizedMemberAccess : DiagnosticAnalyzer
    {
        public const string DiagnosticId = "UnsynchronizedMemberAccess";
        internal static readonly LocalizableString Title = "UnsynchronizedMemberAccess Title";
        private static readonly LocalizableString MessageFormat = "Unsychronized fields are not thread-safe";
        private static readonly LocalizableString Description = "Accessing fields without a get/set methods synchronized with each other and the constructor may lead to …
Run Code Online (Sandbox Code Playgroud)

c# roslyn roslyn-code-analysis

5
推荐指数
1
解决办法
1145
查看次数

标签 统计

c# ×3

roslyn ×3

.net ×1

code-analysis ×1

findall ×1

roslyn-code-analysis ×1