Skip to content

[Automated] Update API Surface Area - #17846

Closed
aspire-repo-bot[bot] wants to merge 1 commit into
mainfrom
update-api-diffs
Closed

[Automated] Update API Surface Area#17846
aspire-repo-bot[bot] wants to merge 1 commit into
mainfrom
update-api-diffs

Conversation

@aspire-repo-bot

Copy link
Copy Markdown
Contributor

Auto-generated update to the API surface to compare current surface vs latest release. This should only be merged once this surface area ships in a new release.

Copilot AI balanced review requested due to automatic review settings June 2, 2026 18:05
@aspire-repo-bot aspire-repo-bot Bot added the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label Jun 2, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@github-actions

github-actions Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 17846

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 17846"

@github-actions

github-actions Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

CLI E2E Tests unknown — 110 passed, 0 failed, 2 unknown (commit eccac94)

View all recordings
- Test Detail
AddPackageInteractiveWhileAppHostRunningDetached Recording · Job · CLI logs
AddPackageWhileAppHostRunningDetached Recording · Job · CLI logs
AgentCommands_AllHelpOutputs_AreCorrect Recording · Job · CLI logs
AgentInitCommand_DefaultSelection_InstallsDefaultSkills Recording · Job · CLI logs
AgentInitCommand_MigratesDeprecatedConfig Recording · Job · CLI logs
AgentInit_NonInteractive_BundleOnlySkillsNotInCatalog Recording · Job · CLI logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp Recording · Job · CLI logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp_DevLocalhost Recording · Job · CLI logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp_Isolated Recording · Job · CLI logs
AllPublishMethodsBuildDockerImages Recording · Job · CLI logs
AspireAddAndStartWorkAgainstLegacyAppHostTs Recording · Job · CLI logs
AspireAddPackageVersionToDirectoryPackagesProps Recording · Job · CLI logs
AspireInitSingleFileAppHostRunsViaDotnetRunAppHost Recording · Job · CLI logs
AspireInit_ExistingAppHostDir_RecreatesNuGetConfigKeepsFiles Recording · Job · CLI logs
AspireInit_SolutionFile_BuildsAgainstChannelHive Recording · Job · CLI logs
AspireStartUpdatesStaleTypeScriptAppHostPath Recording · Job · CLI logs
AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesProps Recording · Job · CLI logs
AspireUpdateRemovesOrphanAppHostPackageVersionWhenSdkAlreadyCurrent Recording · Job · CLI logs
Banner_DisplayedOnFirstRun Recording · Job · CLI logs
Banner_DisplayedWithExplicitFlag Recording · Job · CLI logs
Banner_NotDisplayedWithNoLogoFlag Recording · Job · CLI logs
CertificatesClean_RemovesCertificates Recording · Job · CLI logs
CertificatesTrust_WithNoCert_CreatesAndTrustsCertificate Recording · Job · CLI logs
CertificatesTrust_WithUntrustedCert_TrustsCertificate Recording · Job · CLI logs
ConfigSetGet_CreatesNestedJsonFormat Recording · Job · CLI logs
CreateAndRunAspireStarterProject Recording · Job · CLI logs
CreateAndRunAspireStarterProjectWithBundle Recording · Job · CLI logs
CreateAndRunEmptyAppHostProject Recording · Job · CLI logs
CreateAndRunJavaEmptyAppHostProject Recording · Job · CLI logs
CreateAndRunJsReactProject Recording · Job · CLI logs
CreateAndRunPolyglotAppHostWithDevLocalhostUrls Recording · Job · CLI logs
CreateAndRunPythonReactProject Recording · Job · CLI logs
CreateAndRunTypeScriptEmptyAppHostProject Recording · Job · CLI logs
CreateAndRunTypeScriptStarterProject Recording · Job · CLI logs
CreateJavaAppHostWithViteApp Recording · Job · CLI logs
CreateTypeScriptAppHostWithViteApp_UsesConfiguredToolchain Recording · Job · CLI logs
DashboardRunWithAgentMcpListTracesReturnsNoTraces Recording · Job · CLI logs
DashboardRunWithAgentMcpListTracesReturnsNoTraces_DevLocalhost Recording · Job · CLI logs
DashboardRunWithOtelTracesReturnsNoTraces Recording · Job · CLI logs
DashboardRunWithOtelTracesReturnsNoTraces_DevLocalhost Recording · Job · CLI logs
DeployK8sBasicApiService Recording · Job · CLI logs
DeployK8sWithExternalHelmChart Recording · Job · CLI logs
DeployK8sWithGarnet Recording · Job · CLI logs
DeployK8sWithMongoDB Recording · Job · CLI logs
DeployK8sWithMySql Recording · Job · CLI logs
DeployK8sWithPostgres Recording · Job · CLI logs
DeployK8sWithRabbitMQ Recording · Job · CLI logs
DeployK8sWithRedis Recording · Job · CLI logs
DeployK8sWithSqlServer Recording · Job · CLI logs
DeployK8sWithValkey Recording · Job · CLI logs
DeployTypeScriptAppToKubernetes Recording · Job · CLI logs
DescribeCommandResolvesReplicaNames Recording · Job · CLI logs
DescribeCommandShowsRunningResources Recording · Job · CLI logs
DetachFormatJsonProducesValidJson Recording · Job · CLI logs
DetachFormatJsonProducesValidJsonWhenRestartingExistingInstance Recording · Job · CLI logs
DoPublishAndDeployListStepsWork Recording · Job · CLI logs
DocsCommand_RendersInteractiveMarkdownFromLocalSource Recording · Job · CLI logs
DoctorCommand_DetectsDeprecatedAgentConfig Recording · Job · CLI logs
DoctorCommand_TypeScriptAppHostReportsMissingConfiguredToolchain Recording · Job · CLI logs
DoctorCommand_WithSslCertDir_ShowsTrusted Recording · Job · CLI logs
DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted Recording · Job · CLI logs
GatewayWithoutExternalEndpoint_FailsPublishWithGuidance Recording · Job · CLI logs
GeneratedAspireDevScript_StartsWatchMode_WithConfiguredToolchain Recording · Job · CLI logs
GlobalMigration_HandlesCommentsAndTrailingCommas Recording · Job · CLI logs
GlobalMigration_HandlesMalformedLegacyJson Recording · Job · CLI logs
GlobalMigration_PreservesAllValueTypes Recording · Job · CLI logs
GlobalMigration_SkipsWhenNewConfigExists Recording · Job · CLI logs
GlobalSettings_MigratedFromLegacyFormat Recording · Job · CLI logs
IngressWithoutExternalEndpoint_FailsPublishWithGuidance Recording · Job · CLI logs
InitTypeScriptAppHost_AugmentsExistingViteRepoInWorkspaceSubdirectory Recording · Job · CLI logs
InteractiveCSharpInitCreatesExpectedFiles Recording · Job · CLI logs
InvalidAppHostPathWithComments_IsHealedOnRun Recording · Job · CLI logs
JavaScriptHostingApisRunFromTypeScriptAppHost Recording · Job · CLI logs
LatestCliCanStartStableChannelAppHost Recording · Job · CLI logs
LatestCliCanStartStableChannelTypeScriptAppHost Recording · Job · CLI logs
LegacySettingsMigration_AdjustsRelativeAppHostPath Recording · Job · CLI logs
LogsCommandShowsResourceLogs Recording · Job · CLI logs
OtelLogsReturnsStructuredLogsFromStarterApp Recording · Job · CLI logs
OtelLogsReturnsStructuredLogsFromStarterAppIsolated Recording · Job · CLI logs
PsCommandListsRunningAppHost Recording · Job · CLI logs
PsFormatJsonOutputsOnlyJsonToStdout Recording · Job · CLI logs
PublishJavaScriptPatternsGeneratesExpectedDockerComposeArtifacts Recording · Job · CLI logs
PublishWithConfigureEnvFileUpdatesEnvOutput Recording · Job · CLI logs
PublishWithDockerComposeServiceCallbackSucceeds Recording · Job · CLI logs
PublishWithoutOutputPathUsesAppHostDirectoryDefault Recording · Job · CLI logs
ResourceCommand_FailedExec_ShowsLogPathAndLogHasEntries Recording · Job · CLI logs
ResourceCommand_SetAndDeleteParameterUpdatesDescribeOutput Recording · Job · CLI logs
RestoreGeneratesSdkFiles Recording · Job · CLI logs
RestoreGeneratesSdkFiles_WithConfiguredToolchain Recording · Job · CLI logs
RestoreRefreshesGeneratedSdkAfterAddingIntegration Recording · Job · CLI logs
RestoreSupportsConfigOnlyHelperPackageAndCrossPackageTypes Recording · Job · CLI logs
RunFromParentDirectory_UsesExistingConfigNearAppHost Recording · Job · CLI logs
RunReportsSyntaxErrorsForDotNetAppHost Recording · Job · CLI logs
RunReportsSyntaxErrorsForTypeScriptAppHost Recording · Job · CLI logs
SecretCrudOnDotNetAppHost Recording · Job · CLI logs
SecretCrudOnTypeScriptAppHost Recording · Job · CLI logs
StagingChannel_ConfigureAndVerifySettings_ThenSwitchChannels Recording · Job · CLI logs
StartAndWaitForTypeScriptSqlServerAppHostWithNativeAssets Recording · Job · CLI logs
StartReportsSyntaxErrorsForDotNetAppHost Recording · Job · CLI logs
StartReportsSyntaxErrorsForTypeScriptAppHost Recording · Job · CLI logs
StopAllAppHostsFromAppHostDirectory Recording · Job · CLI logs
StopJavaPolyglotAppHostUsingApphostDirectory Recording · Job · CLI logs
StopNonInteractiveSingleAppHost Recording · Job · CLI logs
StopTypeScriptPolyglotAppHostUsingApphostDirectory Recording · Job · CLI logs
StopWithNoRunningAppHostExitsSuccessfully Recording · Job · CLI logs
TypeScriptAppHostRunDoesNotDeadlockWhenLazyOptionsInvokeAsyncCallback Recording · Job · CLI logs
TypeScriptAppHostWithVite_AllowsDifferentGuestPkgManager Recording · Job · CLI logs
UnAwaitedChainsCompileWithAutoResolvePromises Recording · Job · CLI logs
UpdateToStable_CSharpEmptyAppHost_KeepsConfigChannel Recording · Job · CLI logs
UpdateToStable_CSharpSingleFileInit_KeepsConfigChannel Recording · Job · CLI logs
UpdateToStable_TypeScriptSingleFileInit_KeepsConfigChannel Recording · Job · CLI logs
UpdateToStable_TypeScript_PreviewsStablePkgsAndKeepsChannel Recording · Job · CLI logs

📹 Recordings uploaded automatically from CI run #26838658119

@github-actions
github-actions Bot force-pushed the update-api-diffs branch 2 times, most recently from fe197aa to ac810bc Compare June 4, 2026 17:29
@github-actions
github-actions Bot force-pushed the update-api-diffs branch 2 times, most recently from cfe8b79 to 346b8cc Compare June 6, 2026 16:54
@github-actions
github-actions Bot force-pushed the update-api-diffs branch 3 times, most recently from fe5a901 to 84fffd3 Compare June 9, 2026 17:24
Copilot AI review requested due to automatic review settings June 10, 2026 17:40

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@github-actions
github-actions Bot force-pushed the update-api-diffs branch 2 times, most recently from e88df30 to 641f06c Compare June 12, 2026 17:32
Copilot AI review requested due to automatic review settings June 12, 2026 17:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copilot AI review requested due to automatic review settings June 14, 2026 17:01

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 27 out of 27 changed files in this pull request and generated 7 comments.

Suppressed comments (2)

src/Aspire.Hosting/api/Aspire.Hosting.cs:667

  • InputsDialogValidationContext is marked AspireExport(ExposeProperties = true) and now exposes Services as System.IServiceProvider. If this type is intended to be part of the ATS/polyglot surface, IServiceProvider is a .NET runtime concept that generally isn’t representable in generated polyglot SDKs. Consider re-adding AspireExportIgnore to Services (as it previously had), or exposing a polyglot-friendly abstraction/handle instead.
    [AspireExport(ExposeProperties = true)]
    public sealed partial class InputsDialogValidationContext
    {

src/Aspire.Hosting/api/Aspire.Hosting.cs:671

  • InputsDialogValidationContext is marked AspireExport(ExposeProperties = true) and now exposes Services as System.IServiceProvider. If this type is intended to be part of the ATS/polyglot surface, IServiceProvider is a .NET runtime concept that generally isn’t representable in generated polyglot SDKs. Consider re-adding AspireExportIgnore to Services (as it previously had), or exposing a polyglot-friendly abstraction/handle instead.
        public required System.IServiceProvider Services { get { throw null; } init { } }

Comment on lines 20 to +31
[AspireExport]
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, Go.DelveServerOptions? options = null)
where T : Go.GoAppResource { throw null; }

[System.Obsolete("Use WithDelveServer() or WithDelveServer(DelveServerOptions) instead.")]
[AspireExportIgnore(Reason = "This obsolete compatibility overload is C#-only. Polyglot AppHosts use the DelveServerOptions overload.")]
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, int port = 2345)
where T : Go.GoAppResource { throw null; }

[AspireExportIgnore(Reason = "This C# convenience overload uses default options. Polyglot AppHosts use the DelveServerOptions overload.")]
public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder)
where T : Go.GoAppResource { throw null; }
[AspireExport]
public sealed partial class HttpsCertificateConfigurationCallbackAnnotationContext
{
public required System.Collections.Generic.List<object> Arguments { get { throw null; } init { } }
[AspireExport]
public required ReferenceExpression CertificateWithKeyPath { get { throw null; } init { } }

public required System.Collections.Generic.Dictionary<string, object> EnvironmentVariables { get { throw null; } init { } }
Comment on lines +1220 to +1221
public static ApplicationModel.IResourceBuilder<T> WithDebugSupport<T, TLaunchConfiguration>(this ApplicationModel.IResourceBuilder<T> builder, System.Func<ApplicationModel.LaunchConfigurationCallbackContext, System.Threading.Tasks.Task<TLaunchConfiguration>> launchConfigurationProducer, string launchConfigurationType)
where T : ApplicationModel.IResource { throw null; }
Comment on lines +1227 to +1229

[System.Diagnostics.CodeAnalysis.Experimental("ASPIREEXTENSION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
[AspireExportIgnore(Reason = "Generic debug launch configuration support is not part of the ATS surface.")]
Comment on lines +1230 to 1231
public static ApplicationModel.IResourceBuilder<T> WithDebugSupport<T, TLaunchConfiguration>(this ApplicationModel.IResourceBuilder<T> builder, System.Func<string, System.Threading.CancellationToken, System.Threading.Tasks.Task<TLaunchConfiguration>> launchConfigurationProducer, string launchConfigurationType)
where T : ApplicationModel.IResource { throw null; }
Comment on lines +3945 to +3951
protected override void ClearItems() { }

protected override void InsertItem(int index, IResourceAnnotation item) { }

protected override void RemoveItem(int index) { }

protected override void SetItem(int index, IResourceAnnotation item) { }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 28 out of 28 changed files in this pull request and generated no new comments.

Suppressed comments (4)

src/Aspire.Hosting/api/Aspire.Hosting.cs:703

  • Exposing a server-local FilePath in InteractionFile can leak internal filesystem layout and encourages consumers to bypass the safe accessors (OpenRead / ReadAllBytesAsync). Consider removing FilePath from the public surface (or making it non-public), and rely on Name/Id plus streaming/byte APIs instead.
    public sealed partial class InteractionFile
    {
        internal InteractionFile() { }

        public string FilePath { get { throw null; } }

        public string Id { get { throw null; } }

        public string Name { get { throw null; } }

        public System.IO.Stream OpenRead() { throw null; }

        public System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(System.Threading.CancellationToken cancellationToken = default) { throw null; }
    }

src/Aspire.Hosting/api/Aspire.Hosting.cs:648

  • PromptProgressAsync uses (message, title) ordering, while the other prompt APIs in the same interface consistently use (title, message). This inconsistency makes the API easier to misuse. Recommend aligning the parameter order with the existing pattern (e.g., PromptProgressAsync(string title, string message, ...), or at least use the same ordering across all prompt methods).
        System.Threading.Tasks.Task<InteractionResult<InteractionInputCollection>> PromptInputsAsync(string title, string? message, System.Collections.Generic.IReadOnlyList<InteractionInput> inputs, InputsDialogInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);
        System.Threading.Tasks.Task<InteractionResult<bool>> PromptMessageBoxAsync(string title, string message, MessageBoxInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);
        System.Threading.Tasks.Task<InteractionResult<bool>> PromptNotificationAsync(string title, string message, NotificationInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);
        [System.Diagnostics.CodeAnalysis.Experimental("ASPIREINTERACTION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
        System.Threading.Tasks.Task<InteractionResult<bool>> PromptProgressAsync(string message, string? title = null, ProgressInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);

src/Aspire.Hosting/api/Aspire.Hosting.cs:1087

  • The exported name withRequiredCommandValidation doesn’t match the method name WithRequiredCommand and may be confusing for consumers (especially in polyglot SDKs). Consider exporting with a name aligned to the API concept (e.g., withRequiredCommand) and treat validation as an argument rather than the primary name, unless there is a strong reason to diverge.
        [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECOMMAND001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
        [AspireExport("withRequiredCommandValidation", MethodName = "withRequiredCommandValidation")]
        public static ApplicationModel.IResourceBuilder<T> WithRequiredCommand<T>(this ApplicationModel.IResourceBuilder<T> builder, string command, System.Func<ApplicationModel.RequiredCommandValidationContext, System.Threading.Tasks.Task<ApplicationModel.RequiredCommandValidationResult>> validationCallback, string? helpLink = null)
            where T : ApplicationModel.IResource { throw null; }

src/Aspire.Hosting.Azure/api/Aspire.Hosting.Azure.cs:541

  • Nullability is inconsistent for Subscription: the new constructor requires a non-null subscription parameter, but the Subscription property is declared nullable (object?). If Subscription is always provided for that constructor, consider making the property non-nullable (or alternatively, make the constructor parameter nullable) to keep the contract consistent.
    public sealed partial class ExistingAzureResourceAnnotation : ApplicationModel.IResourceAnnotation
    {
        public ExistingAzureResourceAnnotation(object name, object? resourceGroup, object subscription) { }

        public ExistingAzureResourceAnnotation(object name, object? resourceGroup = null) { }

        public bool IsTenantScope { get { throw null; } }

        public object Name { get { throw null; } }

        public object? ResourceGroup { get { throw null; } }

        public object? Subscription { get { throw null; } }
    }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 28 out of 28 changed files in this pull request and generated 1 comment.

Suppressed comments (2)

src/Aspire.Hosting/api/Aspire.Hosting.cs:671

  • InputsDialogValidationContext.Services is now part of the exported surface (the prior export-ignore was removed). Since System.IServiceProvider is a .NET runtime type and is frequently excluded elsewhere in this file for polyglot/ATS compatibility, consider re-adding AspireExportIgnore here (or projecting an ATS-friendly abstraction) to keep the exported contract consistent and avoid exposing a type that non-.NET SDKs typically cannot represent.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2024

  • Now that both ServiceProvider (obsolete) and Services exist on an ATS-exported context, it would be clearer to hide the obsolete alias from the ATS surface to prevent duplicate concepts and reduce binding ambiguity in generated polyglot SDKs. Consider adding AspireExportIgnore to ServiceProvider (similar to the approach used on other obsolete aliases in this file) while keeping Services as the single exported entry point.
        [System.Obsolete("Use Services instead.")]
        public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

        [AspireExport]
        public required System.IServiceProvider Services { get { throw null; } init { } }

Comment on lines +3945 to +3951
protected override void ClearItems() { }

protected override void InsertItem(int index, IResourceAnnotation item) { }

protected override void RemoveItem(int index) { }

protected override void SetItem(int index, IResourceAnnotation item) { }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 28 out of 28 changed files in this pull request and generated 2 comments.

Suppressed comments (9)

src/Aspire.Hosting/api/Aspire.Hosting.cs:2755

  • The obsolete ServiceProvider alias is still init-settable and independent of Services, which can allow inconsistent initialization (two different service providers) even though the intent is an alias. Prefer making ServiceProvider get-only (no init) and ensuring it always forwards to Services in the implementation, keeping a single source of truth.
        [System.Obsolete("Use Services instead.")]
        [AspireExportIgnore(Reason = "Obsolete alias for Services. The service provider is exposed to polyglot hosts via Services (services).")]
        public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.cs:973

  • This introduces ProtocolVersions while the previous ContainerProtocolVersions member was removed. Removing/renaming a public member is a breaking change for .NET consumers. Consider keeping ContainerProtocolVersions as an [Obsolete] alias that forwards to ProtocolVersions (and keep [EditorBrowsable(Never)] if you want it hidden), to preserve source/binary compatibility.
        [AspireExportIgnore(Reason = "Azure SDK-specific type not usable from polyglot hosts.")]
        public System.Collections.Generic.IList<global::Azure.AI.Projects.Agents.ProtocolVersionRecord> ProtocolVersions { get { throw null; } init { } }

src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.cs:459

  • Several public FoundryModel fields were renamed/removed/replaced (e.g., ClaudeMythosPreview renamed to ClaudeMythos5, and other model identifiers removed elsewhere in this file). This is a breaking API change for callers who reference these fields/constants. If the goal is to steer users away from retired model identifiers, keep the old members as [Obsolete] aliases (optionally with EditorBrowsable(Never)) for at least one compatibility window.
            [AspireValue("FoundryModels")]
            public static readonly FoundryModel ClaudeFable5;

src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.cs:463

  • Several public FoundryModel fields were renamed/removed/replaced (e.g., ClaudeMythosPreview renamed to ClaudeMythos5, and other model identifiers removed elsewhere in this file). This is a breaking API change for callers who reference these fields/constants. If the goal is to steer users away from retired model identifiers, keep the old members as [Obsolete] aliases (optionally with EditorBrowsable(Never)) for at least one compatibility window.
            public static readonly FoundryModel ClaudeMythos5;
            [AspireValue("FoundryModels")]
            public static readonly FoundryModel ClaudeMythosPreview;

src/Aspire.Hosting.Azure/api/Aspire.Hosting.Azure.cs:311

  • CreateForTenant() implies a scope without a resource group, but ResourceGroup remains non-nullable (object). That’s a confusing contract for NRT consumers (and encourages sentinel values or null-in-object at runtime). Consider making ResourceGroup nullable (object?) when HasResourceGroup is false, or split the API into mutually exclusive properties (e.g., ResourceGroup? + Subscription?) that align with IsTenantScope/HasResourceGroup.
        public bool HasResourceGroup { get { throw null; } }

        public bool IsTenantScope { get { throw null; } }

        public object ResourceGroup { get { throw null; } }

src/Aspire.Hosting.Azure/api/Aspire.Hosting.Azure.cs:317

  • CreateForTenant() implies a scope without a resource group, but ResourceGroup remains non-nullable (object). That’s a confusing contract for NRT consumers (and encourages sentinel values or null-in-object at runtime). Consider making ResourceGroup nullable (object?) when HasResourceGroup is false, or split the API into mutually exclusive properties (e.g., ResourceGroup? + Subscription?) that align with IsTenantScope/HasResourceGroup.
        public static AzureBicepResourceScope CreateForSubscription(object subscription) { throw null; }

        public static AzureBicepResourceScope CreateForTenant() { throw null; }

src/Aspire.Hosting.Azure.AppContainers/api/Aspire.Hosting.Azure.AppContainers.cs:65

  • The Experimental(\"ASPIREACADOMAINS001\") attribute was removed from ConfigureCustomDomain. If this API is still meant to be gated as experimental, the attribute should remain to preserve consistent diagnostics/warnings for consumers. If it’s now stable, consider ensuring other related custom-domain APIs have aligned annotations so the stability contract is consistent.
        [AspireExport]
        public static void ConfigureCustomDomain(this global::Azure.Provisioning.AppContainers.ContainerApp app, ApplicationModel.IResourceBuilder<ApplicationModel.ParameterResource> customDomain, ApplicationModel.IResourceBuilder<ApplicationModel.ParameterResource> certificateName) { }

src/Aspire.Hosting/api/Aspire.Hosting.cs:4305

  • Since DisplayOrder is an obsolete public field (and fields are harder to version), consider also adding EditorBrowsable(EditorBrowsableState.Never) to reduce accidental use, and prefer reintroducing the replacement as a property as soon as possible. This helps keep IntelliSense clean and reduces the chance that new code takes a dependency on a member slated for change.
        [System.Obsolete("DisplayOrder was incorrectly created as a field. It will be re-added as a property in a future Aspire version.")]
        public int? DisplayOrder;

src/Aspire.Hosting/api/Aspire.Hosting.cs:4678

  • The Experimental(\"ASPIREPIPELINES001\") attribute was removed from CompletionState. If pipeline completion state is still part of the experimental pipelines surface, keep the attribute to maintain the intended compatibility/diagnostic signal. If it’s intended to be stable now, consider reviewing nearby pipelines APIs to ensure the experimental/stable boundaries remain consistent.
    public enum CompletionState
    {
        InProgress = 0,

public required System.Threading.CancellationToken CancellationToken { get { throw null; } init { } }

public required InteractionInputCollection Inputs { get { throw null; } init { } }

@@ -3650,9 +3879,14 @@ public RequiredCommandValidationContext(string resolvedPath, System.IServiceProv
public string ResolvedPath { get { throw null; } }

public System.IServiceProvider Services { get { throw null; } }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 28 out of 28 changed files in this pull request and generated no new comments.

Suppressed comments (5)

src/Aspire.Hosting/api/Aspire.Hosting.cs:1

  • Arguments is non-nullable but not marked required (and there’s no visible constructor enforcing initialization), unlike the other context properties. This makes the nullability contract inconsistent and allows consumers to instantiate an invalid object state. Consider making Arguments required (matching the surrounding pattern), or alternatively make it nullable if it’s legitimately optional.
//------------------------------------------------------------------------------

src/Aspire.Hosting/api/Aspire.Hosting.cs:1

  • Same issue as the HTTP command contexts: Arguments is non-nullable but not required, while most other properties on the context are required. To keep the public contract consistent and avoid invalid states, mark Arguments as required (or make it nullable if it can be absent).
//------------------------------------------------------------------------------

src/Aspire.Hosting/api/Aspire.Hosting.cs:3613

  • Same issue as the HTTP command contexts: Arguments is non-nullable but not required, while most other properties on the context are required. To keep the public contract consistent and avoid invalid states, mark Arguments as required (or make it nullable if it can be absent).
        [System.Obsolete("Use Services instead.")]
        public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:3951

  • These new overrides have empty bodies, which is inconsistent with the rest of this API stub file (which uses throw null; to prevent accidental runtime behavior). If these API files are ever compiled into a runtime assembly (or referenced in tests/tools), the empty overrides would silently change behavior. Prefer using throw null; stubs here (or ensure these members are only present in reference assemblies where behavior is irrelevant).
        protected override void ClearItems() { }

        protected override void InsertItem(int index, IResourceAnnotation item) { }

        protected override void RemoveItem(int index) { }

        protected override void SetItem(int index, IResourceAnnotation item) { }

src/Aspire.Hosting.DevTunnels/api/Aspire.Hosting.DevTunnels.cs:100

  • UKSouth is inconsistent with typical .NET PascalCase acronym handling and with other region names in this enum (e.g., EastUs, WestUs2). Consider renaming it to UkSouth for consistency (or alternatively standardize all acronym casing across the enum if the project has a different convention).
    public enum DevTunnelRegion
    {
        WestEurope = 0,
        UKSouth = 1,
        NorthEurope = 2,
        EastUs = 3,
        EastUs2 = 4,
        CentralIndia = 5,
        WestUs3 = 6,
        WestUs2 = 7,
        SoutheastAsia = 8,
        BrazilSouth = 9,
        AustraliaCentral = 10,
        AustraliaEast = 11,
        JapanEast = 12
    }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 28 out of 28 changed files in this pull request and generated no new comments.

Suppressed comments (5)

src/Aspire.Hosting/api/Aspire.Hosting.cs:1

  • Both HttpCommandRequestContext and HttpCommandResultContext now have Services plus an obsolete ServiceProvider that remains init-settable. This duplicates state and can lead to inconsistent initialization. Prefer making ServiceProvider a get-only alias (no init) and/or marking it with AspireExportIgnore (similar to other contexts in this file) so the polyglot surface is single-source-of-truth.
//------------------------------------------------------------------------------

src/Aspire.Hosting/api/Aspire.Hosting.cs:2027

  • The obsolete ServiceProvider alias is still init-settable and can diverge from the required Services property. To keep the contract unambiguous, make ServiceProvider a get-only alias of Services (no init), and consider adding AspireExportIgnore to ServiceProvider so polyglot projections only see Services.
    [AspireExport]
    public sealed partial class ContainerFileSystemCallbackContext
    {
        [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECERTIFICATES001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
        [AspireExportIgnore(Reason = "HttpsCertificateContext is an experimental certificate-specific type that is not yet part of the ATS surface.")]
        public ContainerFileSystemCallbackHttpsCertificateContext? HttpsCertificateContext { get { throw null; } set { } }

        [AspireExport]
        public required IResource Model { get { throw null; } init { } }

        [System.Obsolete("Use Services instead.")]
        public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

        [AspireExport]
        public required System.IServiceProvider Services { get { throw null; } init { } }
    }

src/Aspire.Hosting/api/Aspire.Hosting.cs:3617

  • In ProcessCommandResultContext, the obsolete ServiceProvider is still init-settable alongside required Services. As with other contexts, this should be modeled as a read-only alias of Services (and optionally hidden from ATS via AspireExportIgnore) to prevent divergent state and reduce API ambiguity.
        public required string ResourceName { get { throw null; } init { } }

        [System.Obsolete("Use Services instead.")]
        public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

        public required System.IServiceProvider Services { get { throw null; } init { } }

        public required int TotalOutputLineCount { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:444

  • DistributedApplicationExecutionContextOptions exposes both ServiceProvider and Services as independently settable properties, which allows them to get out of sync. Consider making ServiceProvider a get-only alias of Services (and/or removing its setter) so there is a single authoritative value.
        [System.Obsolete("Use Services instead.")]
        public System.IServiceProvider? ServiceProvider { get { throw null; } set { } }

        public System.IServiceProvider? Services { get { throw null; } set { } }

src/Aspire.Hosting.DevTunnels/api/Aspire.Hosting.DevTunnels.cs:100

  • Enum member UKSouth uses an all-caps country code, while the other members follow standard PascalCase word capitalization (e.g., EastUs, WestEurope). For consistency, consider renaming to UkSouth or adding UkSouth as an alias (keeping UKSouth for back-compat if this API is already public).
    public enum DevTunnelRegion
    {
        WestEurope = 0,
        UKSouth = 1,
        NorthEurope = 2,
        EastUs = 3,
        EastUs2 = 4,
        CentralIndia = 5,
        WestUs3 = 6,
        WestUs2 = 7,
        SoutheastAsia = 8,
        BrazilSouth = 9,
        AustraliaCentral = 10,
        AustraliaEast = 11,
        JapanEast = 12
    }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 28 out of 28 changed files in this pull request and generated 1 comment.

Suppressed comments (3)

src/Aspire.Hosting/api/Aspire.Hosting.cs:1

  • The [Experimental(\"ASPIREINTERACTION001\")] attribute was moved off IInteractionService (and other interaction-related types) and is now only applied to the new PromptProgressAsync method. This changes the compile-time/consumer-facing stability contract for the existing interaction APIs (they will no longer be flagged as experimental). If the broader interaction surface is still intended to be experimental, consider keeping the attribute on the interface (or applying it consistently to the related types/members) to avoid unintentionally making the API appear stable.
//------------------------------------------------------------------------------

src/Aspire.Hosting/api/Aspire.Hosting.cs:1231

  • This replaces the prior WithDebugSupport<T, TLaunchConfiguration>(Func<string, TLaunchConfiguration> ..., string launchConfigurationType, Action<CommandLineArgsCallbackContext>? argsCallback = null) signature with new overloads that remove argsCallback and add a different callback-context type. That is a source-breaking public API change for existing .NET callers. Consider re-introducing the previous overload (optionally marked [Obsolete] if you want to steer callers) or adding a compatibility overload that preserves argsCallback behavior so existing callers can upgrade without code changes.
        public static ApplicationModel.IResourceBuilder<T> WithDebugSupport<T, TLaunchConfiguration>(this ApplicationModel.IResourceBuilder<T> builder, System.Func<ApplicationModel.LaunchConfigurationCallbackContext, System.Threading.Tasks.Task<TLaunchConfiguration>> launchConfigurationProducer, string launchConfigurationType)
            where T : ApplicationModel.IResource { throw null; }

        [System.Diagnostics.CodeAnalysis.Experimental("ASPIREEXTENSION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
        [AspireExportIgnore(Reason = "Generic debug launch configuration support is not part of the ATS surface.")]
        public static ApplicationModel.IResourceBuilder<T> WithDebugSupport<T, TLaunchConfiguration>(this ApplicationModel.IResourceBuilder<T> builder, System.Func<string, TLaunchConfiguration> launchConfigurationProducer, string launchConfigurationType)
            where T : ApplicationModel.IResource { throw null; }

        [System.Diagnostics.CodeAnalysis.Experimental("ASPIREEXTENSION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
        [AspireExportIgnore(Reason = "Generic debug launch configuration support is not part of the ATS surface.")]
        public static ApplicationModel.IResourceBuilder<T> WithDebugSupport<T, TLaunchConfiguration>(this ApplicationModel.IResourceBuilder<T> builder, System.Func<string, System.Threading.CancellationToken, System.Threading.Tasks.Task<TLaunchConfiguration>> launchConfigurationProducer, string launchConfigurationType)
            where T : ApplicationModel.IResource { throw null; }

src/Aspire.Hosting.Azure.AppContainers/api/Aspire.Hosting.Azure.AppContainers.cs:70

  • The ConfigureCustomDomain method previously had an [Experimental(\"ASPIREACADOMAINS001\")] annotation, but it has been removed. If this API is still experimental, the attribute removal changes the public contract and stops producing the expected warnings for consumers. Consider restoring the [Experimental] attribute (or moving it to a containing type) if the API is still meant to be guarded.
    public static partial class ContainerAppExtensions
    {
        [AspireExport]
        public static void ConfigureCustomDomain(this global::Azure.Provisioning.AppContainers.ContainerApp app, ApplicationModel.IResourceBuilder<ApplicationModel.ParameterResource> customDomain, ApplicationModel.IResourceBuilder<ApplicationModel.ParameterResource> certificateName) { }

        [AspireExportIgnore(Reason = "Polyglot AppHosts use the internal publishAsAzureContainerAppJob dispatcher export.")]
        public static ApplicationModel.IResourceBuilder<T> PublishAsAzureContainerAppJob<T>(this ApplicationModel.IResourceBuilder<T> resource, System.Action<Azure.AzureResourceInfrastructure, global::Azure.Provisioning.AppContainers.ContainerAppJob> configure)

Comment on lines 3945 to 3954
public sealed partial class ResourceAnnotationCollection : System.Collections.ObjectModel.Collection<IResourceAnnotation>
{
protected override void ClearItems() { }

protected override void InsertItem(int index, IResourceAnnotation item) { }

protected override void RemoveItem(int index) { }

protected override void SetItem(int index, IResourceAnnotation item) { }
}

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 29 out of 29 changed files in this pull request and generated no new comments.

Suppressed comments (3)

src/Aspire.Hosting/api/Aspire.Hosting.cs:1089

  • The exported name withRequiredCommandValidation doesn’t match the method’s primary purpose/name (WithRequiredCommand). This is likely to be confusing in generated polyglot SDKs (it reads like “validation-only”, but also registers the required command). Consider exporting it under a name aligned with the operation (e.g., withRequiredCommand) and keeping “validation” as a parameter/overload concept rather than the exported symbol name.
        [AspireExport("withRequiredCommandValidation", MethodName = "withRequiredCommandValidation")]
        public static ApplicationModel.IResourceBuilder<T> WithRequiredCommand<T>(this ApplicationModel.IResourceBuilder<T> builder, string command, System.Func<ApplicationModel.RequiredCommandValidationContext, System.Threading.Tasks.Task<ApplicationModel.RequiredCommandValidationResult>> validationCallback, string? helpLink = null)

src/Aspire.Hosting.Azure/api/Aspire.Hosting.Azure.cs:317

  • AzureBicepResourceScope.CreateForTenant() implies a valid scope without a resource group, but ResourceGroup is typed as non-nullable object. This creates an API contract mismatch (either ResourceGroup must always exist, or it must be nullable for tenant/subscription scopes). Consider changing ResourceGroup to object? (and documenting when it’s present), or splitting the API into distinct scope types to avoid ambiguous/invalid states.
        public bool HasResourceGroup { get { throw null; } }

        public bool IsTenantScope { get { throw null; } }

        public object ResourceGroup { get { throw null; } }

        public object? Subscription { get { throw null; } }

        public static AzureBicepResourceScope CreateForSubscription(object subscription) { throw null; }

        public static AzureBicepResourceScope CreateForTenant() { throw null; }

src/Aspire.Hosting.Kubernetes/api/Aspire.Hosting.Kubernetes.cs:424

  • KubernetesPersistentVolumeResource is exported but does not specify ExposeProperties = true, and Parent is not individually annotated for export. If polyglot callers are intended to observe resource relationships (common for IResourceWithParent<T> types), consider either setting [AspireExport(ExposeProperties = true)] on the class or adding an explicit export annotation for Parent to ensure it’s visible in generated SDKs.
    [System.Diagnostics.CodeAnalysis.Experimental("ASPIRECOMPUTE002", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
    [AspireExport]
    public sealed partial class KubernetesPersistentVolumeResource : ApplicationModel.Resource, ApplicationModel.IResourceWithParent<KubernetesEnvironmentResource>, ApplicationModel.IResourceWithParent, ApplicationModel.IResource
    {
        public KubernetesPersistentVolumeResource(string name, KubernetesEnvironmentResource environment) : base(default!) { }

        public KubernetesEnvironmentResource Parent { get { throw null; } }
    }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 29 out of 29 changed files in this pull request and generated 2 comments.

Suppressed comments (3)

src/Aspire.Hosting/api/Aspire.Hosting.cs:3953

  • These Collection<T> mutation overrides are currently no-ops, which would silently prevent modifications if this type is ever used with these overrides invoked (and differs from the common throw null; reference-assembly pattern used throughout these API files). If the intent is to block mutation, these should throw NotSupportedException; if mutation is intended, they should call base.*. If this is a reference-assembly stub, use throw null; to match the rest of the file and avoid accidental runtime behavior differences.
        protected override void ClearItems() { }

        protected override void InsertItem(int index, IResourceAnnotation item) { }

        protected override void RemoveItem(int index) { }

        protected override void SetItem(int index, IResourceAnnotation item) { }

src/Aspire.Hosting.Go/api/Aspire.Hosting.Go.cs:70

  • DelveServerOptions.Port is a non-nullable int with no required/default semantics in the public contract, so callers constructing options will naturally end up with 0 unless they remember to set it. If the intent is a conventional default (e.g., 2345), consider making Port nullable (treat null as default), marking it required, or ensuring the implementation enforces a non-zero default so 0 doesn’t unintentionally become the effective port.
    [AspireDto]
    public sealed partial class DelveServerOptions
    {
        public bool AcceptMultiClient { get { throw null; } init { } }

        public bool ContinueOnStart { get { throw null; } init { } }

        public bool Log { get { throw null; } init { } }

        public string? LogOutput { get { throw null; } init { } }

        public bool? OnlySameUser { get { throw null; } init { } }

        public int Port { get { throw null; } init { } }
    }

src/Aspire.Hosting/api/Aspire.Hosting.cs:703

  • InteractionFile is a new public type that looks like it belongs to the same interaction feature area that still uses ASPIREINTERACTION001 experimental annotations on some members/types in this file. Consider annotating InteractionFile consistently (or documenting why it’s intentionally non-experimental) so consumers get consistent compile-time guidance about API stability.
    public sealed partial class InteractionFile
    {
        internal InteractionFile() { }

        public string FilePath { get { throw null; } }

        public string Id { get { throw null; } }

        public string Name { get { throw null; } }

        public System.IO.Stream OpenRead() { throw null; }

        public System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(System.Threading.CancellationToken cancellationToken = default) { throw null; }
    }

Comment on lines +1225 to 1234
[System.Diagnostics.CodeAnalysis.Experimental("ASPIREEXTENSION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
[AspireExportIgnore(Reason = "Generic debug launch configuration support is not part of the ATS surface.")]
public static ApplicationModel.IResourceBuilder<T> WithDebugSupport<T, TLaunchConfiguration>(this ApplicationModel.IResourceBuilder<T> builder, System.Func<string, TLaunchConfiguration> launchConfigurationProducer, string launchConfigurationType)
where T : ApplicationModel.IResource { throw null; }

[System.Diagnostics.CodeAnalysis.Experimental("ASPIREEXTENSION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
[AspireExportIgnore(Reason = "Generic debug launch configuration support is not part of the ATS surface.")]
public static ApplicationModel.IResourceBuilder<T> WithDebugSupport<T, TLaunchConfiguration>(this ApplicationModel.IResourceBuilder<T> builder, System.Func<string, System.Threading.CancellationToken, System.Threading.Tasks.Task<TLaunchConfiguration>> launchConfigurationProducer, string launchConfigurationType)
where T : ApplicationModel.IResource { throw null; }

Comment on lines 972 to +973

[AspireExportIgnore(Reason = "Azure SDK-specific type not usable from polyglot hosts.")]
@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated 1 comment.

Suppressed comments (3)

src/Aspire.Hosting.Azure.AppContainers/api/Aspire.Hosting.Azure.AppContainers.cs:65

  • The ConfigureCustomDomain API appears to have lost its [Experimental(\"ASPIREACADOMAINS001\", ...)] annotation (it was present before per the removed line). If this API is still experimental, please restore the Experimental attribute to preserve the intended diagnostics/stability contract; if it is meant to be stable now, consider adding a PR note/changelog entry since this changes the public API’s stability signal.
        [AspireExport]
        public static void ConfigureCustomDomain(this global::Azure.Provisioning.AppContainers.ContainerApp app, ApplicationModel.IResourceBuilder<ApplicationModel.ParameterResource> customDomain, ApplicationModel.IResourceBuilder<ApplicationModel.ParameterResource> certificateName) { }

src/Aspire.Hosting.Go/api/Aspire.Hosting.Go.cs:22

  • The parameterless WithDelveServer() overload is redundant because the WithDelveServer(DelveServerOptions? options = null) overload already supports the same call-site (builder.WithDelveServer()). Keeping both increases API surface area and documentation burden. Consider removing the parameterless overload (preferred), or alternatively remove the default value on the options parameter if you want the parameterless overload to be the single ‘default options’ entry point.
        public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, Go.DelveServerOptions? options = null)
            where T : Go.GoAppResource { throw null; }

src/Aspire.Hosting.Go/api/Aspire.Hosting.Go.cs:32

  • The parameterless WithDelveServer() overload is redundant because the WithDelveServer(DelveServerOptions? options = null) overload already supports the same call-site (builder.WithDelveServer()). Keeping both increases API surface area and documentation burden. Consider removing the parameterless overload (preferred), or alternatively remove the default value on the options parameter if you want the parameterless overload to be the single ‘default options’ entry point.
        [AspireExportIgnore(Reason = "This C# convenience overload uses default options. Polyglot AppHosts use the DelveServerOptions overload.")]
        public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder)
            where T : Go.GoAppResource { throw null; }

@@ -1175,7 +1219,17 @@ public static ApplicationModel.IResourceBuilder<T> WithContainerFilesSource<T>(t

[System.Diagnostics.CodeAnalysis.Experimental("ASPIREEXTENSION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
[AspireExportIgnore(Reason = "Generic debug launch configuration support is not part of the ATS surface.")]

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated 1 comment.

Suppressed comments (3)

src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.cs:503

  • CohereCommandAPlus052026 appears to be missing an [AspireValue(\"FoundryModels\")] attribute (it’s present on surrounding model fields). If tooling relies on AspireValue to project these values into catalogs/exports, this entry will be silently omitted. Add the attribute to keep behavior consistent with other Foundry model constants.
            [AspireValue("FoundryModels")]
            public static readonly FoundryModel CohereCommandA;
            [AspireValue("FoundryModels")]
            public static readonly FoundryModel CohereCommandAPlus052026;
            [AspireValue("FoundryModels")]
            public static readonly FoundryModel CohereEmbedV3English;

src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.cs:973

  • This PR replaces/renames the hosted-agent protocol versions property (previously ContainerProtocolVersions) with ProtocolVersions. If ContainerProtocolVersions was publicly released, removing it is a breaking change for consumers. Consider keeping ContainerProtocolVersions as an [Obsolete] alias that forwards to ProtocolVersions for at least one release to preserve compatibility.
        [AspireExportIgnore(Reason = "Azure SDK-specific type not usable from polyglot hosts.")]
        public System.Collections.Generic.IList<global::Azure.AI.Projects.Agents.ProtocolVersionRecord> ProtocolVersions { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:4359

  • The DebuggerDisplay label RequiredExtensionId doesn’t match the exposed property name LaunchConfigurationType, which can be confusing during debugging. Update the display string to use a label aligned with the actual API surface (e.g., LaunchConfigurationType = ...).
    [System.Diagnostics.DebuggerDisplay("Type = {GetType().Name,nq}, RequiredExtensionId = {LaunchConfigurationType,nq}")]
    [System.Diagnostics.CodeAnalysis.Experimental("ASPIREEXTENSION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
    public sealed partial class SupportsDebuggingAnnotation : IResourceAnnotation
    {
        internal SupportsDebuggingAnnotation() { }

        public string LaunchConfigurationType { get { throw null; } }
    }

Comment on lines 480 to 486
public partial interface ILanguageSupport
{
string? CertificateBundleEnvironmentVariable { get; }

string Language { get; }

DetectionResult Detect(string directoryPath);

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated no new comments.

Suppressed comments (4)

src/Aspire.Hosting.Go/api/Aspire.Hosting.Go.cs:21

  • The options overload has a default value while a separate parameterless overload is also present. This creates two APIs for the same zero-argument call shape and makes the overload set harder to evolve. Remove = null from the options overload (or remove the parameterless overload) before this surface ships.
        public static ApplicationModel.IResourceBuilder<T> WithDelveServer<T>(this ApplicationModel.IResourceBuilder<T> builder, Go.DelveServerOptions? options = null)

src/Aspire.Hosting/api/Aspire.Hosting.cs:742

  • This property is being introduced as obsolete in the same release as its replacement. Since no released API compatibility requires it, shipping both permanently expands the surface and burdens callers with an API they should never use. Remove Files and expose only GetFiles().
        [System.Obsolete("Use GetFiles() and dispose the returned collection when the files are no longer needed.")]
        [AspireExportIgnore(Reason = "InteractionFile contains non-serializable methods and server-local paths; polyglot callers use InteractionInputFile from base.mts.")]
        public System.Collections.Generic.IReadOnlyList<InteractionFile>? Files { get { throw null; } }

src/Aspire.Hosting.DevTunnels/api/Aspire.Hosting.DevTunnels.cs:91

  • US is a two-letter acronym and should retain both capitals under .NET naming guidelines, consistent with UKSouth in this enum. Rename these members to EastUS and EastUS2 before the names become a compatibility commitment.
        EastUs = 3,
        EastUs2 = 4,

src/Aspire.Hosting.DevTunnels/api/Aspire.Hosting.DevTunnels.cs:94

  • US is a two-letter acronym and should retain both capitals under .NET naming guidelines, consistent with UKSouth in this enum. Rename these members to WestUS3 and WestUS2 before the names become a compatibility commitment.
        WestUs3 = 6,
        WestUs2 = 7,

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated no new comments.

Suppressed comments (6)

src/Aspire.Hosting/api/Aspire.Hosting.cs:648

  • This makes the now-stable IInteractionService require an experimental abstract member. Consumers cannot implement the stable interface without implementing and referencing ASPIREINTERACTION001, and later changes to that experimental contract would break stable implementations. Keep the interface experimental until this member stabilizes, provide a default implementation, or move progress support to a separate experimental interface.
        [System.Diagnostics.CodeAnalysis.Experimental("ASPIREINTERACTION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
        System.Threading.Tasks.Task<InteractionResult<bool>> PromptProgressAsync(string message, ProgressInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);

src/Aspire.Hosting/api/Aspire.Hosting.cs:2046

  • Replacing the previously required ServiceProvider with required Services is source-breaking. Even though the obsolete alias forwards its init setter, C# required-member analysis does not recognize that assignment, so existing object initializers that set ServiceProvider now fail with CS9035. Preserve an initialization path that accepts the old member during the compatibility window.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2781

  • Replacing the previously required ServiceProvider with required Services is source-breaking. The alias setter forwards at runtime, but required-member analysis still rejects existing new ExecuteCommandContext { ServiceProvider = ... } initializers with CS9035. Preserve source compatibility for the old initializer while deprecating it.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2935

  • Making Services required while removing required from the obsolete alias breaks existing HttpCommandRequestContext object initializers. Assigning ServiceProvider does set Services at runtime, but it does not satisfy C# required-member analysis, so recompilation fails with CS9035. Keep the old initialization shape source-compatible during deprecation.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2955

  • Making Services required while removing required from the obsolete alias breaks existing HttpCommandResultContext object initializers. The forwarding setter cannot satisfy C# required-member analysis, so code that still initializes ServiceProvider fails with CS9035 instead of receiving only an obsolete warning. Preserve the old initialization path for the compatibility window.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:4401

  • The required-member rename is source-breaking for callers constructing UpdateCommandStateContext. Existing initializers that set the obsolete ServiceProvider alias do initialize Services at runtime, but the compiler still reports CS9035 because only Services is marked required. Preserve compatibility with the old initializer while migrating consumers.
        public required System.IServiceProvider Services { get { throw null; } init { } }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated 2 comments.

Suppressed comments (5)

src/Aspire.Hosting/api/Aspire.Hosting.cs:648

  • IInteractionService is being made stable while this newly added abstract member remains experimental. Existing implementations stop compiling, and new implementations of the stable interface must opt into ASPIREINTERACTION001. Give this member a default interface implementation or move it to a separate experimental interface; otherwise the interface itself needs to remain experimental.
        System.Threading.Tasks.Task<InteractionResult<bool>> PromptProgressAsync(string message, ProgressInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);

src/Aspire.Hosting/api/Aspire.Hosting.cs:2781

  • Making Services required breaks source compatibility for existing ExecuteCommandContext initializers that set the previously required ServiceProvider; the alias setter does not satisfy the compiler's required-member check. Keep the replacement non-required during the obsolete transition or add a compatible construction path.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2935

  • Making Services required breaks source compatibility for existing HttpCommandRequestContext initializers that set ServiceProvider; assigning that forwarding alias does not satisfy C# required-member analysis. Keep Services non-required during the obsolete transition or provide a compatible constructor.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2955

  • Making Services required breaks source compatibility for existing HttpCommandResultContext initializers that set ServiceProvider; assigning that forwarding alias does not satisfy C# required-member analysis. Keep Services non-required during the obsolete transition or provide a compatible constructor.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:4401

  • Making Services required breaks source compatibility for existing UpdateCommandStateContext initializers that set the previously required ServiceProvider; the alias setter does not satisfy the compiler's required-member check. Keep the replacement non-required during the obsolete transition or add a compatible construction path.
        public required System.IServiceProvider Services { get { throw null; } init { } }

public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

[AspireExport]
public required System.IServiceProvider Services { get { throw null; } init { } }
public static ApplicationModel.IResourceBuilder<AzureCosmosDBResource> AddDatabase(this ApplicationModel.IResourceBuilder<AzureCosmosDBResource> builder, string databaseName) { throw null; }

[AspireExport(RunSyncOnBackgroundThread = true)]
public static ApplicationModel.IResourceBuilder<AzureCosmosDBResource> RunAsClassicEmulator(this ApplicationModel.IResourceBuilder<AzureCosmosDBResource> builder, System.Action<ApplicationModel.IResourceBuilder<Azure.AzureCosmosDBEmulatorResource>>? configureContainer = null) { throw null; }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated 2 comments.

Suppressed comments (5)

src/Aspire.Hosting/api/Aspire.Hosting.cs:648

  • IInteractionService is being stabilized, but this abstract member depends on experimental types. Any external implementation of the otherwise stable interface must now implement PromptProgressAsync and opt into ASPIREINTERACTION001. Keep the experimental contract off the stable interface (for example, use a separate interface), or provide a default interface implementation so implementers are not forced to adopt it.
        [System.Diagnostics.CodeAnalysis.Experimental("ASPIREINTERACTION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
        System.Threading.Tasks.Task<InteractionResult<bool>> PromptProgressAsync(string message, ProgressInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);

src/Aspire.Hosting/api/Aspire.Hosting.cs:2046

  • Making Services required while removing required from the obsolete ServiceProvider alias is source-breaking. Existing object initializers that set only ServiceProvider now fail with CS9035 because the compiler cannot infer that its init accessor assigns Services. Preserve compatibility by allowing either spelling to initialize one validated backing value instead of requiring only the new property.
        [System.Obsolete("Use Services instead.")]
        public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

        [AspireExport]
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2935

  • Making Services required while removing required from the obsolete ServiceProvider alias is source-breaking. Existing HttpCommandRequestContext initializers that use the old property now fail with CS9035. Preserve compatibility by allowing either property to initialize the same validated backing value.
        [System.Obsolete("Use Services instead.")]
        public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2955

  • Making Services required while removing required from the obsolete ServiceProvider alias is source-breaking. Existing HttpCommandResultContext initializers that use the old property now fail with CS9035. Preserve compatibility by allowing either property to initialize the same validated backing value.
        [System.Obsolete("Use Services instead.")]
        public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:4401

  • Making Services required while removing required from the obsolete ServiceProvider alias is source-breaking. Existing UpdateCommandStateContext initializers that set only ServiceProvider now fail with CS9035. Preserve compatibility by allowing either property to initialize the same validated backing value.
        [System.Obsolete("Use Services instead.")]
        [AspireExportIgnore(Reason = "Obsolete alias for Services. The service provider is exposed to polyglot hosts via Services (services).")]
        public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

        public required System.IServiceProvider Services { get { throw null; } init { } }

Comment on lines +740 to +742
[System.Obsolete("Use GetFiles() and dispose the returned collection when the files are no longer needed.")]
[AspireExportIgnore(Reason = "InteractionFile contains non-serializable methods and server-local paths; polyglot callers use InteractionInputFile from base.mts.")]
public System.Collections.Generic.IReadOnlyList<InteractionFile>? Files { get { throw null; } }
Comment on lines +2777 to +2781
[System.Obsolete("Use Services instead.")]
[AspireExportIgnore(Reason = "Obsolete alias for Services. The service provider is exposed to polyglot hosts via Services (services).")]
public System.IServiceProvider ServiceProvider { get { throw null; } init { } }

public required System.IServiceProvider Services { get { throw null; } init { } }
@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated 4 comments.


namespace Aspire.Hosting.Radius.CloudProviders
{
public partial interface IAwsRadiusProviderBuilder
IAwsRadiusProviderBuilder WithIrsa(string iamRoleArn);
}

public partial interface IAzureRadiusProviderBuilder
{
[System.Diagnostics.CodeAnalysis.Experimental("ASPIREDOTNETPROJECT001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
[AspireExport(ExposeProperties = true)]
public partial class DotnetProjectResource : ApplicationModel.ExecutableResource, IResourceWithServiceDiscovery, ApplicationModel.IResourceWithEndpoints, ApplicationModel.IResource

public sealed partial class ExistingAzureResourceAnnotation : ApplicationModel.IResourceAnnotation
{
public ExistingAzureResourceAnnotation(object name, object? resourceGroup, object subscription) { }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated 1 comment.

Suppressed comments (6)

src/Aspire.Hosting/api/Aspire.Hosting.cs:742

  • This member is new relative to the released surface but is already obsolete, so shipping it permanently reserves an API that no released consumer needs. Remove Files before the baseline ships and expose only the ownership-safe GetFiles() API.
        [System.Obsolete("Use GetFiles() and dispose the returned collection when the files are no longer needed.")]
        [AspireExportIgnore(Reason = "InteractionFile contains non-serializable methods and server-local paths; polyglot callers use InteractionInputFile from base.mts.")]
        public System.Collections.Generic.IReadOnlyList<InteractionFile>? Files { get { throw null; } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2046

  • Making Services required breaks existing object initializers that set the formerly required ServiceProvider member. The alias init accessor assigns Services at runtime, but that does not satisfy C# required-member analysis, so those callers now fail with CS9035. Keep the replacement non-required (or provide an equivalent compatibility construction path) while the obsolete alias is supported.
        [AspireExport]
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2781

  • Making Services required breaks existing ExecuteCommandContext initializers that set the formerly required ServiceProvider member. Assigning the obsolete alias does not satisfy C# required-member analysis, so source-compatible callers fail with CS9035. Keep the replacement non-required (or provide an equivalent compatibility construction path) during the rename.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2935

  • Making Services required breaks existing HttpCommandRequestContext initializers that set the formerly required ServiceProvider member. The alias setter does not count toward C# required-member initialization, so those callers fail with CS9035. Keep the new alias non-required (or provide an equivalent compatibility construction path).
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2955

  • Making Services required breaks existing HttpCommandResultContext initializers that set the formerly required ServiceProvider member. The obsolete alias forwards at runtime but does not satisfy C# required-member analysis, causing CS9035. Keep the new alias non-required (or provide an equivalent compatibility construction path).
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:4402

  • Making Services required breaks existing UpdateCommandStateContext initializers that set the formerly required ServiceProvider member. The alias init accessor does not satisfy C# required-member analysis, so callers fail with CS9035 despite the compatibility alias. Keep Services non-required (or provide an equivalent compatibility construction path) during the rename.
        public required System.IServiceProvider Services { get { throw null; } init { } }

Comment on lines +647 to +648
[System.Diagnostics.CodeAnalysis.Experimental("ASPIREINTERACTION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
System.Threading.Tasks.Task<InteractionResult<bool>> PromptProgressAsync(string message, ProgressInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated no new comments.

@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated 1 comment.

Suppressed comments (5)

src/Aspire.Hosting/api/Aspire.Hosting.cs:2046

  • Making Services a new required member defeats the ServiceProvider compatibility alias. Existing object initializers that set every previously required member, including ServiceProvider, now fail with CS9035 because the compiler does not infer that the alias initializer assigns Services. Keep the new canonical property non-required (with both properties sharing storage) so existing callers remain source-compatible, then regenerate this API baseline.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2781

  • Making Services a new required member defeats the ServiceProvider compatibility alias. Existing object initializers that set every previously required member, including ServiceProvider, now fail with CS9035 because assigning the alias does not satisfy the compiler's required-member check. Keep Services non-required while sharing storage with the obsolete alias, then regenerate the API baseline.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2935

  • Making Services a new required member defeats the ServiceProvider compatibility alias. Existing HttpCommandRequestContext initializers that set the formerly required ServiceProvider now fail with CS9035 because the compiler does not treat that alias assignment as satisfying Services. Make the canonical property non-required and share its backing storage with the alias before regenerating this file.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2955

  • Making Services a new required member defeats the ServiceProvider compatibility alias. Existing HttpCommandResultContext initializers that set the formerly required ServiceProvider now fail with CS9035 because the compiler does not treat that alias assignment as satisfying Services. Make the canonical property non-required and share its backing storage with the alias before regenerating this file.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:4402

  • Making Services a new required member defeats the ServiceProvider compatibility alias. Existing UpdateCommandStateContext initializers that set the formerly required ServiceProvider now fail with CS9035 because the compiler does not treat that alias assignment as satisfying Services. Make the canonical property non-required and share its backing storage with the alias before regenerating this file.
        public required System.IServiceProvider Services { get { throw null; } init { } }

Comment on lines +90 to +94
EastUs = 3,
EastUs2 = 4,
CentralIndia = 5,
WestUs3 = 6,
WestUs2 = 7,

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 32 out of 32 changed files in this pull request and generated no new comments.

Suppressed comments (6)

src/Aspire.Hosting/api/Aspire.Hosting.cs:2046

  • Adding Services as a new required member does not preserve source compatibility for the ServiceProvider rename. Existing callers that initialize the previously required ServiceProvider property will now get CS9035 because the compiler cannot infer that its init accessor assigns Services. Keep Services non-required for the deprecation window (using the shared backing value), then regenerate this API baseline.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2781

  • Adding Services as a new required member breaks existing ExecuteCommandContext object initializers that set the previously required ServiceProvider: the compiler does not treat the alias init accessor as satisfying Services, so those callers now fail with CS9035. Keep the replacement property non-required during the obsolete alias's compatibility window, then regenerate this API baseline.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2955

  • This new required Services member makes existing HttpCommandResultContext initializers that set ServiceProvider fail with CS9035; the alias initializer is not recognized as satisfying another required member. Keep Services non-required for the compatibility period and regenerate this baseline from the corrected source.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:4402

  • Adding required Services breaks source compatibility for callers that construct UpdateCommandStateContext with the formerly required ServiceProvider; assigning the obsolete alias does not satisfy this required member at compile time. Keep the new alias target non-required until the old property is removed, then regenerate the API file.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2935

  • This new required Services member makes existing HttpCommandRequestContext initializers that set ServiceProvider fail with CS9035; C# required-member analysis does not follow the alias property's init accessor. Keep Services non-required until the obsolete alias can be removed, then regenerate the API baseline.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:648

  • IInteractionService is being promoted out of experimental status, but this experimental member remains abstract. Every implementation of the now-stable interface must therefore implement an API that is explicitly allowed to change or disappear, so future iteration on PromptProgressAsync would break stable implementers. Move progress support to an experimental sub-interface or provide a compatible default interface implementation before stabilizing IInteractionService.
        [System.Diagnostics.CodeAnalysis.Experimental("ASPIREINTERACTION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
        System.Threading.Tasks.Task<InteractionResult<bool>> PromptProgressAsync(string message, ProgressInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);

@github-actions

Copy link
Copy Markdown
Contributor

Tests selector

53 / 99 PR test projects · 4 PR jobs · 2 advisory-only targets, from 32 changed files.

Selected PR test projects (53 / 99)

Aspire.Cli.EndToEnd.Tests, Aspire.Cli.Tests, Aspire.Hosting.Analyzers.Tests, Aspire.Hosting.Azure.Kubernetes.Tests, Aspire.Hosting.Azure.Kusto.Tests, Aspire.Hosting.Azure.Tests, Aspire.Hosting.Blazor.Tests, Aspire.Hosting.Browsers.Tests, Aspire.Hosting.CodeGeneration.Go.Tests, Aspire.Hosting.CodeGeneration.Java.Tests, Aspire.Hosting.CodeGeneration.Python.Tests, Aspire.Hosting.CodeGeneration.Rust.Tests, Aspire.Hosting.CodeGeneration.TypeScript.Tests, Aspire.Hosting.Containers.Tests, Aspire.Hosting.DevTunnels.Tests, Aspire.Hosting.Docker.Tests, Aspire.Hosting.Dotnet.Tests, Aspire.Hosting.DotnetTool.Tests, Aspire.Hosting.EntityFrameworkCore.Tests, Aspire.Hosting.Foundry.Tests, Aspire.Hosting.Garnet.Tests, Aspire.Hosting.GitHub.Models.Tests, Aspire.Hosting.Go.Tests, Aspire.Hosting.Java.Tests, Aspire.Hosting.JavaScript.Tests, Aspire.Hosting.Kafka.Tests, Aspire.Hosting.Keycloak.Tests, Aspire.Hosting.Kubernetes.Tests, Aspire.Hosting.Maui.Tests, Aspire.Hosting.Milvus.Tests, Aspire.Hosting.MongoDB.Tests, Aspire.Hosting.MySql.Tests, Aspire.Hosting.Nats.Tests, Aspire.Hosting.OpenAI.Tests, Aspire.Hosting.Oracle.Tests, Aspire.Hosting.Orleans.Tests, Aspire.Hosting.PostgreSQL.Tests, Aspire.Hosting.Python.Tests, Aspire.Hosting.Qdrant.Tests, Aspire.Hosting.RabbitMQ.Tests, Aspire.Hosting.Radius.Tests, Aspire.Hosting.Redis.Tests, Aspire.Hosting.RemoteHost.Tests, Aspire.Hosting.Rust.Tests, Aspire.Hosting.Seq.Tests, Aspire.Hosting.SqlServer.Tests, Aspire.Hosting.Testing.Tests, Aspire.Hosting.Tests, Aspire.Hosting.Valkey.Tests, Aspire.Hosting.Yarp.Tests, Aspire.Managed.Tests, Aspire.Microsoft.Azure.Cosmos.Tests, Aspire.Playground.Tests

Selected PR jobs (4)

extension-e2e, polyglot, typescript-api-compat, typescript-sdk

Advisory workflow impact (2)

  • Aspire.EndToEnd.Tests (outerloop-only)
  • deployment-e2e (schedule/dispatch-only)

How these were chosen — grouped by what changed

⚠️ 18 of the 54 selected test projects come from a single change — src/Aspire.Hosting.Testing/api/Aspire.Hosting.Testing.cs.

🔧 src/Aspire.Hosting.Testing/api/Aspire.Hosting.Testing.cs (changed source)
1 directly: Aspire.Hosting.Testing.Tests
17 via the project graph

show 17

Aspire.Hosting.Browsers.Tests (2 hops), Aspire.Hosting.Containers.Tests, Aspire.Hosting.DotnetTool.Tests (2 hops), Aspire.Hosting.Garnet.Tests (2 hops), Aspire.Hosting.JavaScript.Tests (2 hops), Aspire.Hosting.Kafka.Tests (2 hops), Aspire.Hosting.Milvus.Tests (2 hops), Aspire.Hosting.MongoDB.Tests (2 hops), Aspire.Hosting.MySql.Tests (2 hops), Aspire.Hosting.Nats.Tests (2 hops), Aspire.Hosting.OpenAI.Tests, Aspire.Hosting.Oracle.Tests (2 hops), Aspire.Hosting.PostgreSQL.Tests (2 hops), Aspire.Hosting.Python.Tests (2 hops), Aspire.Hosting.Seq.Tests (2 hops), Aspire.Hosting.SqlServer.Tests (2 hops), Aspire.Hosting.Valkey.Tests (2 hops)

🔧 src/Aspire.Hosting/api/Aspire.Hosting.cs (changed source)
6 via the project graph: Aspire.Hosting.Analyzers.Tests (2 hops), Aspire.Hosting.CodeGeneration.Go.Tests, Aspire.Hosting.CodeGeneration.Java.Tests, Aspire.Hosting.CodeGeneration.Python.Tests, Aspire.Hosting.CodeGeneration.Rust.Tests, Aspire.Hosting.Maui.Tests

🔧 src/Aspire.Hosting.Azure.AppContainers/api/Aspire.Hosting.Azure.AppContainers.cs (changed source)
1 directly: Aspire.Hosting.Azure.Tests
2 via the project graph: Aspire.Hosting.CodeGeneration.TypeScript.Tests, Aspire.Hosting.Tests

🔧 src/Aspire.Hosting.Docker/api/Aspire.Hosting.Docker.cs (changed source)
1 directly: Aspire.Hosting.Docker.Tests
2 via the project graph: Aspire.Hosting.Kubernetes.Tests, Aspire.Hosting.Yarp.Tests

🔧 src/Aspire.Hosting.Azure.Kubernetes/api/Aspire.Hosting.Azure.Kubernetes.cs (changed source)
2 directly: Aspire.Hosting.Azure.Kubernetes.Tests, Aspire.Hosting.Azure.Tests

🔧 src/Aspire.Hosting.Azure/api/Aspire.Hosting.Azure.cs (changed source)
1 directly: Aspire.Hosting.Azure.Tests
1 via the project graph: Aspire.Hosting.Azure.Kusto.Tests (2 hops)

🔧 src/Aspire.Hosting.Blazor/api/Aspire.Hosting.Blazor.cs (changed source)
1 directly: Aspire.Hosting.Blazor.Tests
1 via the project graph: Aspire.Playground.Tests

🔧 src/Aspire.Hosting.RabbitMQ/api/Aspire.Hosting.RabbitMQ.cs (changed source)
1 directly: Aspire.Hosting.RabbitMQ.Tests
1 via the project graph: Aspire.Hosting.Radius.Tests

🔧 src/Aspire.Hosting.Yarp/api/Aspire.Hosting.Yarp.cs (changed source)
1 directly: Aspire.Hosting.Yarp.Tests
1 via the project graph: Aspire.Hosting.RemoteHost.Tests

🔧 src/Aspire.TypeSystem/api/Aspire.TypeSystem.cs (changed source)
2 via the project graph: Aspire.Cli.Tests (2 hops), Aspire.Managed.Tests (3 hops)

📦 affected project Aspire.Hosting.Redis
1 test: Aspire.EndToEnd.Tests

📦 affected project Aspire.TypeSystem
1 test: Aspire.Cli.EndToEnd.Tests

🔧 src/Aspire.Hosting.Azure.AppService/api/Aspire.Hosting.Azure.AppService.cs (changed source)
1 directly: Aspire.Hosting.Azure.Tests

🔧 src/Aspire.Hosting.Azure.CosmosDB/api/Aspire.Hosting.Azure.CosmosDB.cs (changed source)
1 directly: Aspire.Hosting.Azure.Tests

🔧 src/Aspire.Hosting.Azure.KeyVault/api/Aspire.Hosting.Azure.KeyVault.cs (changed source)
1 directly: Aspire.Hosting.Azure.Tests

🔧 src/Aspire.Hosting.Azure.Network/api/Aspire.Hosting.Azure.Network.cs (changed source)
1 directly: Aspire.Hosting.Azure.Tests

🔧 src/Aspire.Hosting.Azure.PostgreSQL/api/Aspire.Hosting.Azure.PostgreSQL.cs (changed source)
1 directly: Aspire.Hosting.Azure.Tests

🔧 src/Aspire.Hosting.Azure.Redis/api/Aspire.Hosting.Azure.Redis.cs (changed source)
1 directly: Aspire.Hosting.Azure.Tests

🔧 src/Aspire.Hosting.Azure.Sandboxes/api/Aspire.Hosting.Azure.Sandboxes.cs (changed source)
1 directly: Aspire.Hosting.Azure.Tests

🔧 src/Aspire.Hosting.DevTunnels/api/Aspire.Hosting.DevTunnels.cs (changed source)
1 directly: Aspire.Hosting.DevTunnels.Tests

🔧 src/Aspire.Hosting.Dotnet/api/Aspire.Hosting.Dotnet.cs (changed source)
1 directly: Aspire.Hosting.Dotnet.Tests

🔧 src/Aspire.Hosting.EntityFrameworkCore/api/Aspire.Hosting.EntityFrameworkCore.cs (changed source)
1 directly: Aspire.Hosting.EntityFrameworkCore.Tests

🔧 src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.cs (changed source)
1 directly: Aspire.Hosting.Foundry.Tests

🔧 src/Aspire.Hosting.GitHub.Models/api/Aspire.Hosting.GitHub.Models.cs (changed source)
1 directly: Aspire.Hosting.GitHub.Models.Tests

🔧 src/Aspire.Hosting.Go/api/Aspire.Hosting.Go.cs (changed source)
1 directly: Aspire.Hosting.Go.Tests

🔧 src/Aspire.Hosting.Java/api/Aspire.Hosting.Java.cs (changed source)
1 directly: Aspire.Hosting.Java.Tests

🔧 src/Aspire.Hosting.Keycloak/api/Aspire.Hosting.Keycloak.cs (changed source)
1 directly: Aspire.Hosting.Keycloak.Tests

🔧 src/Aspire.Hosting.Kubernetes/api/Aspire.Hosting.Kubernetes.cs (changed source)
1 directly: Aspire.Hosting.Kubernetes.Tests

🔧 src/Aspire.Hosting.Orleans/api/Aspire.Hosting.Orleans.cs (changed source)
1 directly: Aspire.Hosting.Orleans.Tests

🔧 src/Aspire.Hosting.Qdrant/api/Aspire.Hosting.Qdrant.cs (changed source)
1 directly: Aspire.Hosting.Qdrant.Tests

🔧 src/Aspire.Hosting.Radius/api/Aspire.Hosting.Radius.cs (changed source)
1 directly: Aspire.Hosting.Radius.Tests

🔧 src/Aspire.Hosting.Redis/api/Aspire.Hosting.Redis.cs (changed source)
1 directly: Aspire.Hosting.Redis.Tests

🔧 src/Aspire.Hosting.Rust/api/Aspire.Hosting.Rust.cs (changed source)
1 directly: Aspire.Hosting.Rust.Tests

🔧 src/Components/Aspire.Microsoft.Azure.Cosmos/api/Aspire.Microsoft.Azure.Cosmos.cs (changed source)
1 directly: Aspire.Microsoft.Azure.Cosmos.Tests

Job reasons

Job Triggered by
deployment-e2e affected project Aspire.Hosting.Azure.AppContainers
extension-e2e src/Aspire.Hosting.Azure.AppContainers/api/Aspire.Hosting.Azure.AppContainers.cs, src/Aspire.Hosting.Azure.AppService/api/Aspire.Hosting.Azure.AppService.cs, src/Aspire.Hosting.Azure.CosmosDB/api/Aspire.Hosting.Azure.CosmosDB.cs, src/Aspire.Hosting.Azure.KeyVault/api/Aspire.Hosting.Azure.KeyVault.cs, src/Aspire.Hosting.Azure.Kubernetes/api/Aspire.Hosting.Azure.Kubernetes.cs, src/Aspire.Hosting.Azure.Network/api/Aspire.Hosting.Azure.Network.cs, src/Aspire.Hosting.Azure.PostgreSQL/api/Aspire.Hosting.Azure.PostgreSQL.cs, src/Aspire.Hosting.Azure.Redis/api/Aspire.Hosting.Azure.Redis.cs, src/Aspire.Hosting.Azure.Sandboxes/api/Aspire.Hosting.Azure.Sandboxes.cs, src/Aspire.Hosting.Azure/api/Aspire.Hosting.Azure.cs, src/Aspire.Hosting.Blazor/api/Aspire.Hosting.Blazor.cs, src/Aspire.Hosting.DevTunnels/api/Aspire.Hosting.DevTunnels.cs, src/Aspire.Hosting.Docker/api/Aspire.Hosting.Docker.cs, src/Aspire.Hosting.Dotnet/api/Aspire.Hosting.Dotnet.cs, src/Aspire.Hosting.EntityFrameworkCore/api/Aspire.Hosting.EntityFrameworkCore.cs, src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.cs, src/Aspire.Hosting.GitHub.Models/api/Aspire.Hosting.GitHub.Models.cs, src/Aspire.Hosting.Go/api/Aspire.Hosting.Go.cs, src/Aspire.Hosting.Java/api/Aspire.Hosting.Java.cs, src/Aspire.Hosting.Keycloak/api/Aspire.Hosting.Keycloak.cs, src/Aspire.Hosting.Kubernetes/api/Aspire.Hosting.Kubernetes.cs, src/Aspire.Hosting.Orleans/api/Aspire.Hosting.Orleans.cs, src/Aspire.Hosting.Qdrant/api/Aspire.Hosting.Qdrant.cs, src/Aspire.Hosting.RabbitMQ/api/Aspire.Hosting.RabbitMQ.cs, src/Aspire.Hosting.Radius/api/Aspire.Hosting.Radius.cs, src/Aspire.Hosting.Redis/api/Aspire.Hosting.Redis.cs, src/Aspire.Hosting.Rust/api/Aspire.Hosting.Rust.cs, src/Aspire.Hosting.Testing/api/Aspire.Hosting.Testing.cs, src/Aspire.Hosting.Yarp/api/Aspire.Hosting.Yarp.cs, src/Aspire.Hosting/api/Aspire.Hosting.cs
• affected project Aspire.Hosting.Azure.AppContainers
polyglot affected project Aspire.Hosting.Go
typescript-api-compat affected project Aspire.Hosting.Azure.AppContainers
typescript-sdk affected project Aspire.Hosting.CodeGeneration.TypeScript

Selection computed for commit 7d4e34b.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 32 out of 32 changed files in this pull request and generated no new comments.

Suppressed comments (6)

src/Aspire.Hosting/api/Aspire.Hosting.cs:648

  • IInteractionService is now stable, but this new abstract member requires the experimental ProgressInteractionOptions API. Existing implementations must add this member and opt into/suppress ASPIREINTERACTION001 just to implement the stable interface. Move progress support to a separate experimental interface or provide a default interface implementation before stabilizing IInteractionService.
        System.Threading.Tasks.Task<InteractionResult<bool>> PromptProgressAsync(string message, ProgressInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);

src/Aspire.Hosting/api/Aspire.Hosting.cs:2053

  • Making Services required while changing ServiceProvider into a non-required alias breaks existing object initializers: assigning ServiceProvider does not satisfy C#'s required-member check for Services, so callers receive CS9035 despite following the obsolete migration path. Preserve compatibility by keeping the new alias non-required, or defer this required-member rename to a breaking release.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2788

  • Making Services required while changing ServiceProvider into a non-required alias breaks existing object initializers: assigning ServiceProvider does not satisfy C#'s required-member check for Services, so callers receive CS9035 despite following the obsolete migration path. Preserve compatibility by keeping the new alias non-required, or defer this required-member rename to a breaking release.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2962

  • Making Services required while changing ServiceProvider into a non-required alias breaks existing object initializers: assigning ServiceProvider does not satisfy C#'s required-member check for Services, so callers receive CS9035 despite following the obsolete migration path. Preserve compatibility by keeping the new alias non-required, or defer this required-member rename to a breaking release.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:4413

  • Making Services required while changing ServiceProvider into a non-required alias breaks existing object initializers: assigning ServiceProvider does not satisfy C#'s required-member check for Services, so callers receive CS9035 despite following the obsolete migration path. Preserve compatibility by keeping the new alias non-required, or defer this required-member rename to a breaking release.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2942

  • Making Services required while changing ServiceProvider into a non-required alias breaks existing object initializers: assigning ServiceProvider does not satisfy C#'s required-member check for Services, so callers receive CS9035 despite following the obsolete migration path. Preserve compatibility by keeping the new alias non-required, or defer this required-member rename to a breaking release.
        public required System.IServiceProvider Services { get { throw null; } init { } }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 32 out of 32 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/Aspire.Hosting/api/Aspire.Hosting.cs:742

  • Files is being added to the shipped baseline already obsolete. Since it is absent from the previous release surface, retaining it creates a permanent compatibility obligation without providing a migration need. Remove this property from the source before regenerating the baseline and ship only GetFiles().
        [System.Obsolete("Use GetFiles() and dispose the returned collection when the files are no longer needed.")]
        [AspireExportIgnore(Reason = "InteractionFile contains non-serializable methods and server-local paths; polyglot callers use InteractionInputFile from base.mts.")]
        public System.Collections.Generic.IReadOnlyList<InteractionFile>? Files { get { throw null; } }

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The baseline captures source-breaking required-member renames, a stable interface tied to an experimental member, and a silent Cosmos emulator behavior change.

Review details

Suppressed comments (7)

src/Aspire.Hosting/api/Aspire.Hosting.cs:2053

  • Replacing the required ServiceProvider initializer with a new required Services member is source-breaking: existing object initializers that set the obsolete alias still fail required-member analysis because the compiler does not treat that assignment as setting Services. Keep existing initializers valid, for example by making the new alias non-required or providing a compatibility construction path that satisfies the required-member contract.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2788

  • Replacing the required ServiceProvider initializer with a new required Services member is source-breaking: existing object initializers that set the obsolete alias still fail required-member analysis because the compiler does not treat that assignment as setting Services. Keep existing initializers valid, for example by making the new alias non-required or providing a compatibility construction path that satisfies the required-member contract.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2942

  • Replacing the required ServiceProvider initializer with a new required Services member is source-breaking: existing object initializers that set the obsolete alias still fail required-member analysis because the compiler does not treat that assignment as setting Services. Keep existing initializers valid, for example by making the new alias non-required or providing a compatibility construction path that satisfies the required-member contract.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:2962

  • Replacing the required ServiceProvider initializer with a new required Services member is source-breaking: existing object initializers that set the obsolete alias still fail required-member analysis because the compiler does not treat that assignment as setting Services. Keep existing initializers valid, for example by making the new alias non-required or providing a compatibility construction path that satisfies the required-member contract.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:4413

  • Replacing the required ServiceProvider initializer with a new required Services member is source-breaking: existing object initializers that set the obsolete alias still fail required-member analysis because the compiler does not treat that assignment as setting Services. Keep existing initializers valid, for example by making the new alias non-required or providing a compatibility construction path that satisfies the required-member contract.
        public required System.IServiceProvider Services { get { throw null; } init { } }

src/Aspire.Hosting/api/Aspire.Hosting.cs:648

  • Graduating IInteractionService while adding this abstract experimental member makes the stable interface require implementers to depend on an experimental contract, and future changes to progress interactions would break stable third-party implementations. Keep the interface experimental until this member stabilizes, move progress support to a separate experimental capability interface, or provide a compatibility-safe default implementation.
        [System.Diagnostics.CodeAnalysis.Experimental("ASPIREINTERACTION001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
        System.Threading.Tasks.Task<InteractionResult<bool>> PromptProgressAsync(string message, ProgressInteractionOptions? options = null, System.Threading.CancellationToken cancellationToken = default);

src/Aspire.Hosting.Azure.CosmosDB/api/Aspire.Hosting.Azure.CosmosDB.cs:68

  • This new escape hatch does not preserve behavior for existing callers: the stable RunAsEmulator API now silently selects the Linux/vNext emulator instead of the classic emulator. Preserve the established RunAsEmulator semantics and expose the new emulator under a distinct API, or explicitly approve and document this as a breaking migration before accepting the release baseline.
        [AspireExport(RunSyncOnBackgroundThread = true)]
        public static ApplicationModel.IResourceBuilder<AzureCosmosDBResource> RunAsClassicEmulator(this ApplicationModel.IResourceBuilder<AzureCosmosDBResource> builder, System.Action<ApplicationModel.IResourceBuilder<Azure.AzureCosmosDBEmulatorResource>>? configureContainer = null) { throw null; }
  • Files reviewed: 32/32 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

Stable API changes introduce source-compatibility and contract-design issues that should be resolved before release.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Suppressed comments (6)

src/Aspire.Hosting/api/Aspire.Hosting.cs:648

  • IInteractionService is now stable, but every implementation must implement this experimental member and opt into ASPIREINTERACTION001. Keep the interface experimental until all required members are stable, or move this operation behind an experimental derived interface/default implementation.
    src/Aspire.Hosting/api/Aspire.Hosting.cs:2057
  • The obsolete alias does not preserve source compatibility: an existing initializer that assigns ServiceProvider no longer satisfies the newly required Services member and fails with CS9035. Provide a construction pattern where either alias initializes the shared value before regenerating the API.
    src/Aspire.Hosting/api/Aspire.Hosting.cs:2792
  • The obsolete alias does not preserve source compatibility: an existing initializer that assigns ServiceProvider no longer satisfies the newly required Services member and fails with CS9035. Provide a construction pattern where either alias initializes the shared value before regenerating the API.
    src/Aspire.Hosting/api/Aspire.Hosting.cs:2946
  • The obsolete alias does not preserve source compatibility: an existing initializer that assigns ServiceProvider no longer satisfies the newly required Services member and fails with CS9035. Provide a construction pattern where either alias initializes the shared value before regenerating the API.
    src/Aspire.Hosting/api/Aspire.Hosting.cs:2966
  • The obsolete alias does not preserve source compatibility: an existing initializer that assigns ServiceProvider no longer satisfies the newly required Services member and fails with CS9035. Provide a construction pattern where either alias initializes the shared value before regenerating the API.
    src/Aspire.Hosting/api/Aspire.Hosting.cs:4417
  • The obsolete alias does not preserve source compatibility: an existing initializer that assigns ServiceProvider no longer satisfies the newly required Services member and fails with CS9035. Provide a construction pattern where either alias initializes the shared value before regenerating the API.
  • Files reviewed: 34/34 changed files
  • Comments generated: 2
  • Review effort level: Balanced

Comment on lines +315 to +317
public static AzureBicepResourceScope CreateForSubscription(object subscription) { throw null; }

public static AzureBicepResourceScope CreateForTenant() { throw null; }
Comment on lines 983 to 985
public sealed partial class ParameterProcessor
{
public ParameterProcessor(ApplicationModel.ResourceNotificationService notificationService, ApplicationModel.ResourceLoggerService loggerService, IInteractionService interactionService, Microsoft.Extensions.Logging.ILogger<ParameterProcessor> logger, DistributedApplicationExecutionContext executionContext, Pipelines.IDeploymentStateManager deploymentStateManager, IUserSecretsManager userSecretsManager) { }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants