Skip to content

Conversation

@hallipr
Copy link
Member

@hallipr hallipr commented Nov 20, 2025

What does this PR do?

Replace the mixed net9.0, net10-preview dependency with the new net10.0 GA version.

Pre-merge Checklist

  • Required for All PRs
    • Read contribution guidelines
    • PR title clearly describes the change
    • Commit history is clean with descriptive messages (cleanup guide)
    • Added comprehensive tests for new/modified functionality
    • Updated servers/Azure.Mcp.Server/CHANGELOG.md and/or servers/Fabric.Mcp.Server/CHANGELOG.md for product changes (features, bug fixes, UI/UX, updated dependencies)
  • For MCP tool changes:
    • One tool per PR: This PR adds or modifies only one MCP tool for faster review cycles
    • Updated servers/Azure.Mcp.Server/README.md and/or servers/Fabric.Mcp.Server/README.md documentation
    • Validate README.md changes using script at eng/scripts/Process-PackageReadMe.ps1. See Package README
    • Updated command list in /servers/Azure.Mcp.Server/docs/azmcp-commands.md and/or /docs/fabric-commands.md
    • Run .\eng\scripts\Update-AzCommandsMetadata.ps1 to update tool metadata in azmcp-commands.md (required for CI)
    • For new or modified tool descriptions, ran ToolDescriptionEvaluator and obtained a score of 0.4 or more and a top 3 ranking for all related test prompts
    • For tools with new names, including new tools or renamed tools, update consolidated-tools.json
    • For new tools associated with Azure services or publicly available tools/APIs/products, add URL to documentation in the PR description
  • Extra steps for Azure MCP Server tool changes:
    • Updated test prompts in /servers/Azure.Mcp.Server/docs/e2eTestPrompts.md
    • 👉 For Community (non-Microsoft team member) PRs:
      • Security review: Reviewed code for security vulnerabilities, malicious code, or suspicious activities before running tests (crypto mining, spam, data exfiltration, etc.)
      • Manual tests run: added comment /azp run mcp - pullrequest - live to run Live Test Pipeline

Copilot AI review requested due to automatic review settings November 20, 2025 01:34
@hallipr hallipr requested review from a team as code owners November 20, 2025 01:34
Copilot finished reviewing on behalf of hallipr November 20, 2025 01:38
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR updates the repository from a mixed .NET 9.0 and .NET 10.0-preview dependency to the new .NET 10.0 GA version. The changes comprehensively update SDK versions, target frameworks, build paths, and documentation across the codebase.

Key Changes

  • Updated global.json SDK version from preview (10.0.100-preview.7) to GA (10.0.100)
  • Changed TargetFramework from net9.0 to net10.0 in Directory.Build.props
  • Removed preview-specific NuGet packages (System.Linq.AsyncEnumerable, System.Net.ServerSentEvents)
  • Updated all documentation and build scripts to reference net10.0 paths instead of net9.0
  • Removed redundant .NET 9.0.x SDK installation steps from CI/CD pipelines

Reviewed Changes

Copilot reviewed 18 out of 18 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
global.json Updated SDK version from preview to GA release (10.0.100)
Directory.Build.props Changed TargetFramework from net9.0 to net10.0
Directory.Packages.props Removed preview package versions for System.Linq.AsyncEnumerable and System.Net.ServerSentEvents
core/Azure.Mcp.Core/src/Azure.Mcp.Core.csproj Removed System.Linq.AsyncEnumerable package reference
eng/pipelines/templates/jobs/*.yml Removed .NET 9.0.x SDK installation tasks (build.yml, analyze.yml, live-test.yml)
eng/scripts/Update-AzCommandsMetadata.ps1 Updated default azmcp path from net9.0 to net10.0, improved path resolution
eng/scripts/Test-Code.ps1 Reordered parameters to make Paths positional
servers/Azure.Mcp.Server/README.md Updated .NET version reference from preview to GA
servers/Azure.Mcp.Server/TROUBLESHOOTING.md Updated all binary paths from net9.0 to net10.0, enhanced table of contents
servers/Azure.Mcp.Server/docs/new-command.md Updated TargetFramework references to net10.0, cleaned up trailing whitespace
servers/Azure.Mcp.Server/tests/.../CommandMetadataSyncTests.cs Updated executable path from net9.0 to net10.0
servers/Fabric.Mcp.Server/README.md Updated SDK version reference from 9.x to 10.x
servers/Fabric.Mcp.Server/SUPPORT.md Updated .NET version references from 9 to 10
servers/Fabric.Mcp.Server/TROUBLESHOOTING.md Updated SDK version and binary paths from net9.0 to net10.0
CONTRIBUTING.md Updated all azmcp executable paths from net9.0 to net10.0
AGENTS.md Updated example mcp.json path from net9.0 to net10.0

Copy link
Contributor

@alzimmermsft alzimmermsft left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI @conniey , since you have this issue assigned to you #1198

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the following also be updated:

System.Formats.Asn1 -> 10.0.0
Microsoft.Extensions.AI.Abstractions -> 10.0.0
Microsoft.Extensions.AI.Evaluation.Quality -> 10.0.0
Microsoft.AspNetCore.SignalR.Client -> 10.0.0
Microsoft.Extensions.Caching.Memory -> 10.0.0
Microsoft.Extensions.Configuration -> 10.0.0
Microsoft.Extensions.Configuration.EnvironmentVariables -> 10.0.0
Microsoft.Extensions.Configuration.Json -> 10.0.0
Microsoft.Extensions.DependencyInjection -> 10.0.0
Microsoft.Extensions.Hosting -> 10.0.0
System.CommandLine -> 2.0.0
System.Numerics.Tensors -> 10.0.0
System.Text.Json -> 10.0.0

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated, but now we get some new AOT failures:
https://dev.azure.com/azure-sdk/public/public%20Team/_build/results?buildId=5603241&view=logs&j=1e679852-4871-5dae-dd38-eb073eb853d4&t=3639d9f6-46e5-5c59-1fa3-9c261e132d8a&l=105

ILLink : Trim analysis error IL2026: Azure.AI.OpenAI.Files.AzureFileExpirationOptions.PersistableModelWriteCore(ModelReaderWriterOptions): Using member 'System.ClientModel.Primitives.ModelReaderWriter.Write(!!0, ModelReaderWriterOptions)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. This method uses reflection.  Use the overload that takes a ModelReaderWriterContext to be AOT compatible. [/mnt/vss/_work/1/s/servers/Azure.Mcp.Server/src/Azure.Mcp.Server.csproj]
ILLink : Trim analysis error IL2026: Azure.AI.OpenAI.CustomSerializationHelpers.SerializeInstance<TOutput,UInstanceInput>(UInstanceInput, ModelReaderWriterOptions): Using member 'System.ClientModel.Primitives.ModelReaderWriter.Write(Object, ModelReaderWriterOptions)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. This method uses reflection.  Use the overload that takes a ModelReaderWriterContext to be AOT compatible. [/mnt/vss/_work/1/s/servers/Azure.Mcp.Server/src/Azure.Mcp.Server.csproj]
ILLink : Trim analysis error IL2026: Azure.ResourceManager.HDInsight.Models.HDInsightLocalizedName.System.ClientModel.Primitives.IPersistableModel<Azure.ResourceManager.HDInsight.Models.HDInsightLocalizedName>.Write(ModelReaderWriterOptions): Using member 'System.ClientModel.Primitives.ModelReaderWriter.Write(!!0, ModelReaderWriterOptions)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. This method uses reflection.  Use the overload that takes a ModelReaderWriterContext to be AOT compatible. [/mnt/vss/_work/1/s/servers/Azure.Mcp.Server/src/Azure.Mcp.Server.csproj]
ILLink : Trim analysis error IL2026: Azure.ResourceManager.HDInsight.Models.HDInsightUsage.System.ClientModel.Primitives.IPersistableModel<Azure.ResourceManager.HDInsight.Models.HDInsightUsage>.Write(ModelReaderWriterOptions): Using member 'System.ClientModel.Primitives.ModelReaderWriter.Write(!!0, ModelReaderWriterOptions)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. This method uses reflection.  Use the overload that takes a ModelReaderWriterContext to be AOT compatible. [/mnt/vss/_work/1/s/servers/Azure.Mcp.Server/src/Azure.Mcp.Server.csproj]

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@hallipr, could you update Azure.ResourceManager.HDInsight to 1.2.0-beta.5? I'll look into Azure.AI.OpenAI

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Checking with the .NET SDK team on Microsoft.Extensions.AI.OpenAI. If this PR is urgent, we can keep the current version of Microsoft.Extensions.AI.OpenAI and just update Azure.ResourceManager.HDInsight to 1.2.0-beta.5.

Comment on lines -16 to -21
- task: UseDotNet@2
displayName: "Use .NET SDK 9.0.x"
retryCountOnTaskFailure: 3
inputs:
packageType: sdk
version: 9.0.x
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Depending how soon we want this PR in may still need this but be updated to 10.0.x as not all hosted images have updated to include .NET Core 10.0 yet

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's a task just above these that installs the version in global.json

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We were having to also install 9.0 after 10-preview because we wanted 10.0-preview tooling, but a 9.0 dependency

@joshfree joshfree moved this from Untriaged to In Progress in Azure MCP Server Nov 20, 2025
"Azure Storage": {
"type": "stdio",
"command": "<absolute-path-to>/azure-mcp/core/src/AzureMcp.Cli/bin/Debug/net9.0/azmcp[.exe]",
"command": "<absolute-path-to>/mcp/servers/Azure.Mcp.Server/src/Debug/net10.0/azmcp[.exe]",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What are these examples for? Do we need to really hard-code the full path?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are examples of using a local build of Azure MCP in an mcp.json. Ex, I have this locally for testing end-to-end:

{
	"servers": {
		"azure-mcp-local-debug": {
			"type": "stdio",
			"command": "npx",
			"args": [
				"-y",
				"D:\\GitHub\\mcp\\servers\\Azure.Mcp.Server\\src\\bin\\Debug\\net9.0\\azmcp.exe",
				"server",
				"start",
				"--mode",
				"namespace"
			]
		}
	}
}

@hallipr hallipr marked this pull request as draft November 20, 2025 21:20
@joshfree joshfree added the Engineering Excellence Items required to be resolved before onboarding the "third wave" of azure RPs label Nov 24, 2025
@joshfree joshfree modified the milestones: 2025-12, 2026-01 Nov 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Engineering Excellence Items required to be resolved before onboarding the "third wave" of azure RPs

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

6 participants