Python: .NET: Executor source gen for workflow executor routing (#3131)

* Roslyn Source Generators for Workflow Executor Routing.

* Update dotnet/src/Microsoft.Agents.AI.Workflows.Generators/ExecutorRouteGenerator.cs

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

* WIP.

* All fixed up except dangling sends/yields attriutes, working on that next.

* Add protocol-only generation for SendsMessage/YieldsOutput attributes

* Ensuring collections that can change order are sorted to enable pipeline caching.

* Improvents per PR feedback.

---------

Co-authored-by: alliscode <bentho@microsoft.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Ben Thomas
2026-01-22 16:02:12 +00:00
committed by GitHub
co-authored by Copilot alliscode
parent 4940d0ef36
commit ea7818d390
25 changed files with 3478 additions and 0 deletions
@@ -0,0 +1,65 @@
<Project Sdk="Microsoft.NET.Sdk">
<!-- Source generators MUST target netstandard2.0 only -->
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<!-- Enable C# 9 records support on netstandard2.0 -->
<InjectIsExternalInitOnLegacy>true</InjectIsExternalInitOnLegacy>
<!-- Source generator specific settings -->
<IsRoslynComponent>true</IsRoslynComponent>
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
<!-- Don't include build output in lib folder -->
<IncludeBuildOutput>false</IncludeBuildOutput>
<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
<!-- Suppress nullable warnings for netstandard2.0 -->
<NoWarn>$(NoWarn);nullable</NoWarn>
<!-- Suppress analyzer release tracking requirement for source generators -->
<NoWarn>$(NoWarn);RS2008</NoWarn>
<!-- Suppress NU5128 warning about dependencies not matching target framework -->
<NoWarn>$(NoWarn);NU5128</NoWarn>
</PropertyGroup>
<PropertyGroup>
<VersionSuffix>preview</VersionSuffix>
</PropertyGroup>
<Import Project="$(RepoRoot)/dotnet/nuget/nuget-package.props" />
<PropertyGroup>
<!-- NuGet Package Settings -->
<Title>Microsoft Agent Framework Workflows Source Generators</Title>
<Description>Provides Roslyn source generators for Microsoft Agent Framework Workflows, enabling compile-time route configuration for executors.</Description>
<DevelopmentDependency>true</DevelopmentDependency>
</PropertyGroup>
<ItemGroup>
<!-- Use Roslyn 4.4.0 - minimum version for ForAttributeWithMetadataName API.
Corresponds to .NET 7 SDK / VS 2022 17.4+.
Higher versions would require newer SDKs, breaking users on older versions.
See: https://andrewlock.net/creating-a-source-generator-part-9-avoiding-performance-pitfalls-in-incremental-generators/ -->
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" VersionOverride="4.4.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" VersionOverride="3.3.4" PrivateAssets="all" />
</ItemGroup>
<ItemGroup>
<!-- Include the analyzer DLL using the correct target framework path -->
<None Include="$(OutputPath)$(AssemblyName).dll" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" />
<None Include="$(OutputPath)$(AssemblyName).pdb" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" />
</ItemGroup>
<!-- Ensure the files exist before packing -->
<Target Name="EnsureAnalyzerAssembliesExist" BeforeTargets="GenerateNuspec">
<Error Condition="!Exists('$(OutputPath)$(AssemblyName).dll')"
Text="Analyzer assembly not found at: $(OutputPath)$(AssemblyName).dll" />
</Target>
</Project>