Files
SergeyMenshykh e5f7b9c260 .NET: Support reflection for discovery of resources and scripts in class-based skills (#5183)
* support reflection for discovery of resources and scripts in class-based skills

* fix format issues

* refactor samples to use reflection

* Validate resource member signatures during discovery

Add discovery-time validation in AgentClassSkill.DiscoverResources() to
fail fast when [AgentSkillResource] is applied to members with incompatible
signatures:

- Reject indexer properties (getter has parameters)
- Reject methods with parameters other than IServiceProvider or
  CancellationToken

Throws InvalidOperationException with actionable error messages instead of
allowing silent runtime failures when ReadAsync invokes the AIFunction with
no named arguments.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* prevent duplicates

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
e5f7b9c260 · 2026-04-10 11:56:28 +01:00
History
..

Class-Based Agent Skills Sample

This sample demonstrates how to define Agent Skills as C# classes using AgentClassSkill with attributes for automatic script and resource discovery.

What it demonstrates

  • Creating skills as classes that extend AgentClassSkill
  • Using [AgentSkillResource] on properties to define resources
  • Using [AgentSkillScript] on methods to define scripts
  • Automatic discovery (no need to override Resources/Scripts)
  • Using the AgentSkillsProvider constructor with class-based skills
  • Overriding SerializerOptions for Native AOT compatibility

Skills Included

unit-converter (class-based)

A UnitConverterSkill class that converts between common units. Defined in Program.cs:

  • conversion-table — Static resource with factor table
  • convert — Script that performs value × factor conversion

Running the Sample

Prerequisites

  • .NET 10.0 SDK
  • Azure OpenAI endpoint with a deployed model

Setup

export AZURE_OPENAI_ENDPOINT="https://your-endpoint.openai.azure.com/"
export AZURE_OPENAI_DEPLOYMENT_NAME="gpt-5.4-mini"

Run

dotnet run

Expected Output

Converting units with class-based skills
------------------------------------------------------------
Agent: Here are your conversions:

1. **26.2 miles → 42.16 km** (a marathon distance)
2. **75 kg → 165.35 lbs**