Files
agent-framework/dotnet/samples/03-workflows/Declarative
T
Roger Barreto 628bb1af48 .NET: Rename Microsoft.Agents.AI.AzureAI to Microsoft.Agents.AI.Foundry and consolidate FoundryMemory (#5042)
* Update Foundry Responses as ChatClientAgent

* Migrate obsolete AzureAI integration tests to versioned agent pattern

Replace obsolete CreateAIAgentAsync/GetAIAgentAsync calls with
Agents.CreateAgentVersionAsync() + AsAIAgent(AgentVersion) in all
AzureAI integration tests.

- Rename AIProjectClient* test files to FoundryVersionedAgent*
- Register AIFunction tools in PromptAgentDefinition.Tools for
  server-side visibility via AsOpenAIResponseTool()
- Skip structured output tests (AzureAIProjectChatClient clears
  ResponseFormat for versioned agents)
- Remove all [Obsolete] attributes and #pragma warning disable CS0618

* Merge FoundryMemory package into AzureAI under Memory/ folder

Move all FoundryMemory source, unit tests, and integration tests into
the Microsoft.Agents.AI.AzureAI package. Change namespace from
Microsoft.Agents.AI.FoundryMemory to Microsoft.Agents.AI.AzureAI.

- Add [Experimental] to FoundryMemoryProviderOptions and Scope
- Rename internal AIProjectClientExtensions to MemoryStoreExtensions
- Update AzureAI .csproj with Compliance.Abstractions, Redaction
- Remove FoundryMemory from solution and release filter
- Update sample to reference AzureAI instead of FoundryMemory
- Delete old Microsoft.Agents.AI.FoundryMemory project and tests

* Add EnsureMemoryStoreCreatedAsync and memory existence checks to integration tests

- Ensure memory store is created before testing memory operations
- Add AZURE_AI_EMBEDDING_DEPLOYMENT_NAME config setting
- Assert memories exist in store via SearchMemoriesAsync before cleanup
- Verify scope isolation with direct memory store queries

* Fix and rename AzureAI unit tests for RAPI vs Versioned clarity

- Rename AsAIAgentAsync_* to AsAIAgent_* (drop Async from method group)
- Add _Rapi_ prefix to non-versioned (Responses API) tests
- Add _Versioned_ prefix to versioned agent tests where needed
- Fix RAPI tests: assert GetService<AIProjectClient>() is null
- Fix Versioned tests: assert IsType<FoundryAgent> and
  GetService<AIProjectClient>() returns the client instance
- Fix UserAgent header tests: proper HTTP handler routing
- Fix ChatClient_UsesDefaultConversationIdAsync test setup
- All 153 unit tests pass with 0 failures

* Rename Microsoft.Agents.AI.AzureAI to Microsoft.Agents.AI.Foundry

Rename the project, namespace, folder, and all references from
Microsoft.Agents.AI.AzureAI to Microsoft.Agents.AI.Foundry.
Also rename Workflows.Declarative.AzureAI to .Foundry.

- Rename src, unit test, integration test, and workflow folders
- Update namespaces in all source and test .cs files
- Update ProjectReferences in ~47 sample and test .csproj files
- Update solution files (.slnx, .slnf)
- Update sample using statements
- Update READMEs, SKILL.md, ADRs in docs/
- Disable package validation baseline for renamed packages
- Fix UTF-8 BOM encoding on all affected .cs files
- AzureAI.Persistent left completely unchanged

* Fix format: remove ImplicitUsings, add explicit usings, fix BOM encoding

- Remove ImplicitUsings=enable from Foundry csproj to resolve IDE0005
  on shared ReplacingRedactor.cs
- Add explicit System usings to all source files that relied on them
- Sort usings alphabetically per editorconfig rules
- Fix UTF-8 BOM on 12 sample Program.cs files
- Rename Azure AI Foundry Agents to Microsoft Foundry Agents in docs
628bb1af48 · 2026-04-02 01:25:24 +00:00
History
..

Summary

These samples showcases the ability to parse a declarative Foundry Workflow file (YAML) to build a Workflow that may be executed using the same pattern as any code-based workflow.

Configuration

These samples must be configured to create and use agents your Microsoft Foundry Project.

Settings

We suggest using .NET Secret Manager to avoid the risk of leaking secrets into the repository, branches and pull requests. You can also use environment variables if you prefer.

The configuraton required by the samples is:

Setting Name Description
AZURE_AI_PROJECT_ENDPOINT The endpoint URL of your Microsoft Foundry Project.
AZURE_AI_MODEL_DEPLOYMENT_NAME The name of the model deployment to use
AZURE_AI_BING_CONNECTION_ID The name of the Bing Grounding connection configured in your Microsoft Foundry Project.

To set your secrets with .NET Secret Manager:

  1. From the root of the repository, navigate the console to the project folder:

    cd dotnet/samples/03-workflows/Declarative/ExecuteWorkflow
    
  2. Examine existing secret definitions:

    dotnet user-secrets list
    
  3. If needed, perform first time initialization:

    dotnet user-secrets init
    
  4. Define setting that identifies your Microsoft Foundry Project (endpoint):

    dotnet user-secrets set "AZURE_AI_PROJECT_ENDPOINT" "https://..."
    
  5. Define setting that identifies your Microsoft Foundry Model Deployment (endpoint):

    dotnet user-secrets set "AZURE_AI_MODEL_DEPLOYMENT_NAME" "gpt-5"
    
  6. Define setting that identifies your Bing Grounding connection:

    dotnet user-secrets set "AZURE_AI_BING_CONNECTION_ID" "mybinggrounding"
    

You may alternatively set your secrets as an environment variable (PowerShell):

$env:AZURE_AI_PROJECT_ENDPOINT="https://..."
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5"
$env:AZURE_AI_BING_CONNECTION_ID="mybinggrounding"

Authorization

Use Azure CLI to authorize access to your Microsoft Foundry Project:

az login
az account get-access-token

Execution

The samples may be executed within Visual Studio or VS Code.

To run the sampes from the command line:

  1. From the root of the repository, navigate the console to the project folder:

    cd dotnet/samples/03-workflows/Declarative/Marketing
    dotnet run Marketing
    
  2. Run the demo and optionally provided input:

    dotnet run "An eco-friendly stainless steel water bottle that keeps drinks cold for 24 hours."
    dotnet run c:/myworkflows/Marketing.yaml
    

    The sample will allow for interactive input in the absence of an input argument.