diff --git a/dotnet/Directory.Packages.props b/dotnet/Directory.Packages.props
index ef1eb280f0..bc0b0dd0db 100644
--- a/dotnet/Directory.Packages.props
+++ b/dotnet/Directory.Packages.props
@@ -107,7 +107,8 @@
-
+
+
all
diff --git a/dotnet/agent-framework-dotnet.slnx b/dotnet/agent-framework-dotnet.slnx
index db6552a9c8..246768b367 100644
--- a/dotnet/agent-framework-dotnet.slnx
+++ b/dotnet/agent-framework-dotnet.slnx
@@ -77,6 +77,8 @@
+
+
@@ -271,7 +273,6 @@
-
diff --git a/dotnet/eng/MSBuild/Shared.props b/dotnet/eng/MSBuild/Shared.props
index ffb4fc7269..54f93699ad 100644
--- a/dotnet/eng/MSBuild/Shared.props
+++ b/dotnet/eng/MSBuild/Shared.props
@@ -8,4 +8,7 @@
+
+
+
diff --git a/dotnet/samples/GettingStarted/Workflows/Declarative/DeclarativeWorkflow.csproj b/dotnet/samples/GettingStarted/Workflows/Declarative/DeclarativeWorkflow.csproj
index 52bc3c4328..37ba5f0f5b 100644
--- a/dotnet/samples/GettingStarted/Workflows/Declarative/DeclarativeWorkflow.csproj
+++ b/dotnet/samples/GettingStarted/Workflows/Declarative/DeclarativeWorkflow.csproj
@@ -25,7 +25,6 @@
-
diff --git a/dotnet/samples/GettingStarted/Workflows/DeclarativeCode/DeclarativeCode.csproj b/dotnet/samples/GettingStarted/Workflows/DeclarativeCode/DeclarativeCode.csproj
new file mode 100644
index 0000000000..c8321d553d
--- /dev/null
+++ b/dotnet/samples/GettingStarted/Workflows/DeclarativeCode/DeclarativeCode.csproj
@@ -0,0 +1,32 @@
+
+
+
+ Exe
+ net9.0
+ net9.0
+ $(ProjectsDebugTargetFrameworks)
+ enable
+ disable
+ 5ee045b0-aea3-4f08-8d31-32d1a6f8fed0
+ $(NoWarn);CA1812
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dotnet/samples/GettingStarted/Workflows/DeclarativeCode/Generated.cs b/dotnet/samples/GettingStarted/Workflows/DeclarativeCode/Generated.cs
new file mode 100644
index 0000000000..32ba92bb66
--- /dev/null
+++ b/dotnet/samples/GettingStarted/Workflows/DeclarativeCode/Generated.cs
@@ -0,0 +1,1351 @@
+// ------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// ------------------------------------------------------------------------------
+
+#nullable enable
+#pragma warning disable IDE0005 // Extra using directive is ok.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Agents.AI;
+using Microsoft.Agents.AI.Workflows;
+using Microsoft.Agents.AI.Workflows.Declarative;
+using Microsoft.Agents.AI.Workflows.Declarative.Kit;
+using Microsoft.Extensions.AI;
+
+namespace Test.WorkflowProviders;
+
+///
+/// This class provides a factory method to create a instance.
+///
+///
+/// The workflow defined here was generated from a declarative workflow definition.
+/// Declarative workflows utilize Power FX for defining conditions and expressions.
+/// To learn more about Power FX, see:
+/// https://learn.microsoft.com/power-platform/power-fx/formula-reference-copilot-studio
+///
+public static class TestWorkflowProvider
+{
+ ///
+ /// The root executor for a declarative workflow.
+ ///
+ internal sealed class WorkflowDemoRootExecutor(
+ DeclarativeWorkflowOptions options,
+ Func inputTransform) :
+ RootExecutor("workflow_demo_Root", options, inputTransform)
+ where TInput : notnull
+ {
+ protected override async ValueTask ExecuteAsync(TInput message, IWorkflowContext context, CancellationToken cancellationToken)
+ {
+ // Set environment variables
+ await this.InitializeEnvironmentAsync(
+ context,
+ "FOUNDRY_AGENT_RESEARCHWEB",
+ "FOUNDRY_AGENT_RESEARCHANALYST",
+ "FOUNDRY_AGENT_RESEARCHMANAGER",
+ "FOUNDRY_AGENT_RESEARCHWEATHER",
+ "FOUNDRY_AGENT_RESEARCHCODER").ConfigureAwait(false);
+
+ // Initialize variables
+ await context.QueueStateUpdateAsync("AgentResponse", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ await context.QueueStateUpdateAsync("AgentResponseText", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ await context.QueueStateUpdateAsync("AvailableAgents", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ await context.QueueStateUpdateAsync("FinalResponse", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ await context.QueueStateUpdateAsync("InputTask", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ await context.QueueStateUpdateAsync("InternalConversationId", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ await context.QueueStateUpdateAsync("NextSpeaker", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ await context.QueueStateUpdateAsync("Plan", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ await context.QueueStateUpdateAsync("ProgressLedgerUpdate", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ await context.QueueStateUpdateAsync("RestartCount", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ await context.QueueStateUpdateAsync("SeedTask", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ await context.QueueStateUpdateAsync("StallCount", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ await context.QueueStateUpdateAsync("TaskFacts", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ await context.QueueStateUpdateAsync("TaskInstructions", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ await context.QueueStateUpdateAsync("TeamDescription", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ await context.QueueStateUpdateAsync("TypedProgressLedger", UnassignedValue.Instance, "Local").ConfigureAwait(false);
+ }
+ }
+
+ ///
+ /// Assigns an evaluated expression, other variable, or literal value to the "Local.AvailableAgents" variable.
+ ///
+ internal sealed class SetvariableAaslmfExecutor(FormulaSession session) : ActionExecutor(id: "setVariable_aASlmF", session)
+ {
+ //
+ protected override async ValueTask