Skip to content
Back to skills

Roslyn Query

ASecurity

Query .NET/C# codebases using Roslyn AST analysis via dotnet run file. Use for tracing data flow, auditing API usage, finding pattern violations, or ad-hoc codebase queries.

  • 141 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 5, 2026
ai-agentsrustgoc#bashexpressapi

Works with

  • api

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned September 5, 2026

npx -y skills add NikiforovAll/claude-code-rules --skill roslyn-query --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Roslyn Query?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Roslyn Query
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/nikiforovall-roslyn-query/badge)](https://www.skillsdirectory.com/skills/nikiforovall-roslyn-query)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: roslyn-query
description: Query .NET/C# codebases using Roslyn AST analysis via dotnet run file. Use for tracing data flow, auditing API usage, finding pattern violations, or ad-hoc codebase queries.
argument-hint: "[analysis description or query type]"
---

# Roslyn Query

Query .NET/C# codebases using Roslyn AST analysis scripts executed via `dotnet run file.cs`.

Before generating scripts, load the `handbook-dotnet:dotnet-run-file` skill for execution conventions and directive syntax.

## When to Use

- Trace data flow from sources to sinks (taint analysis)
- Audit all assignments to specific properties
- Find all callers of a method
- Find all implementations of an interface
- Detect pattern violations (empty catches, missing sanitizers, etc.)
- Architecture validation (layer violations)
- Ad-hoc codebase structural queries

## Analysis Tiers

### Tier 1: Syntax-Only (fast, no compilation)

Uses `CSharpSyntaxTree.ParseText()` — parses files individually, no solution loading.

Best for:
- Property assignment audits (`x.Content = ...`)
- Empty catch block detection
- Naming convention checks
- Cyclomatic complexity
- Magic number/string detection
- Method size metrics
- Pattern matching on code structure

### Tier 2: Semantic (needs project/solution)

Uses `MSBuildWorkspace` — loads project, resolves types, enables cross-file analysis.

Best for:
- Find all callers of a method (`SymbolFinder.FindCallersAsync`)
- Find interface implementations (`SymbolFinder.FindImplementationsAsync`)
- Find method overrides (`SymbolFinder.FindOverridesAsync`)
- Type dependency graphs
- Full data flow analysis (`SemanticModel.AnalyzeDataFlow`)

## Instructions

### Step 1: Determine analysis type

Based on the user's request, choose the appropriate template from `references/templates.md`. If no template fits, compose a custom script using the patterns documented there.

### Step 2: Generate the script

Create a `.cs` file in a `scripts/` directory (or temp location) using `dotnet run file.cs` format with `#:package` directives.

For syntax-only analysis:
```csharp
#:package Microsoft.CodeAnalysis.CSharp@4.*
```

For semantic analysis, additionally:
```csharp
#:package Microsoft.CodeAnalysis.CSharp.Workspaces@4.*
#:package Microsoft.CodeAnalysis.Workspaces.MSBuild@4.*
#:package Microsoft.Build.Locator@1.*
#:property DisableMSBuildAssemblyCopyCheck=true
```

> **Note:** `DisableMSBuildAssemblyCopyCheck=true` suppresses the MSBL001 build error that requires `ExcludeAssets="runtime"` on MSBuild packages — an attribute `#:package` directives can't express. Safe for throwaway analysis scripts.
>
> **`.slnx` not supported:** Roslyn 4.x `MSBuildWorkspace` only supports `.sln`, not `.slnx`. Use `OpenProjectAsync` with a `.csproj` instead — transitive project references are loaded automatically.

### Step 3: Script conventions

- Accept target directory/path via `args[0]`, default to `Directory.GetCurrentDirectory()`
- Use `Path.GetRelativePath()` for output paths
- Print structured output: file:line, description, context
- Use color: green for safe, yellow for warnings, red for violations
- Exit code 0 = clean, 1 = findings

### Step 4: Execute

```bash
dotnet run scripts/my-analysis.cs -- <target-path>
```

### Step 5: Interpret results

Analyze the output. For taint analysis, categorize findings:
- **Safe** — trusted source (code-generated, AI output, literal null)
- **Already sanitized** — sanitizer call deeper in call chain (syntax-only false positive)
- **Needs investigation** — external input, user-authored content
- **Violation** — clear miss that should be fixed

## Key Roslyn APIs Quick Reference

Load `references/roslyn-api.md` for detailed API reference with code examples.

## Templates

Load `references/templates.md` for ready-to-use analysis script templates.

Files in this skill

  • SKILL.md3.8 KB
  • references/roslyn-api.md5.1 KB
  • references/templates.md15.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.