PR: #14981 · Branch: sebros/polyglot-hosting → release/13.2
Issue: #14978
Reviewed by: GPT-5.3-Codex and Claude Opus 4.6
| Category | Count |
|---|---|
New [AspireExport] |
56 |
New [AspireExportIgnore] |
92 |
| Total new annotations | 148 |
| Verified ✅ Correct | 134 |
| Verified |
7 |
| Verified ❌ Wrong (needs revert) | 5 |
Conclusion: Both models confirmed most annotations are correct. 5 annotations were identified as exportable:
WithContainerRegistryEndpoint—ContainerRegistryResourcealready auto-registered viaAddContainerRegistryPublishAsDockerFile(2 overloads) —Action<IResourceBuilder<ContainerResource>>is an exported handle typeAddProject(name, path, Action<ProjectResourceOptions>)—ProjectResourceOptionshas only primitive propertiesAddCSharpApp(name, path, Action<ProjectResourceOptions>)— same as above
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
AddCertificateAuthorityCollection(builder, name) |
[AspireExportIgnore] |
Signature is ATS-compatible (just strings) and the return type IResourceBuilder<CertificateAuthorityCollection> would auto-register the builder class. However, every companion With* method on this resource requires X509Certificate2 or similar incompatible types, so the resource would be unusable in polyglot hosts (zero configurable methods). Both models agree. |
|
WithCertificateAuthority(builder, X509Certificate2) |
[AspireExportIgnore] |
✅ Correct | X509Certificate2 is not ATS-compatible. Both models agree. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
AddConnectionString(builder, name, resource?) |
[AspireExportIgnore] |
✅ Correct | Raw IResourceWithConnectionString interface param. A ReferenceExpression overload IS exported. |
AddConnectionString(builder, name, Action<ReferenceExpressionBuilder>) |
[AspireExportIgnore] |
✅ Correct | ReferenceExpressionBuilder is not an exported callback context. |
AddConnectionString(builder, name, ReferenceExpression) |
[AspireExport] |
✅ Correct | All params ATS-compatible. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
AddContainerRegistry(builder, name) |
[AspireExport] |
✅ Correct | String params only. |
WithContainerRegistryEndpoint(builder, containerRegistry, endpointName) |
[AspireExportIgnore] |
❌ Could be exported | ContainerRegistryResource is already auto-registered via the exported AddContainerRegistry method. All params are ATS-compatible. Candidate for future export. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
AddContainer(builder, name, image) |
[AspireExport] |
✅ Correct | String params. |
AddContainer(builder, name, image, tag) |
[AspireExport] |
✅ Correct | String params. |
WithImageRegistry(builder, registry) |
[AspireExport] |
✅ Correct | String params. |
WithImage(builder, image, tag) |
[AspireExport] |
✅ Correct | String params. |
WithImageTag(builder, tag) |
[AspireExport] |
✅ Correct | String param. |
WithImageSHA256(builder, sha256) |
[AspireExport] |
✅ Correct | String param. |
WithDockerfile(builder, contextPath, dockerfilePath?, stage?) |
[AspireExport] |
✅ Correct | String params only (no callback). |
WithBuildArg(builder, name, value) |
[AspireExport] |
✅ Correct | String params. |
WithBuildArg(builder, name, ParameterResource) |
[AspireExport] |
✅ Correct | ParameterResource is ATS-compatible. |
WithBuildSecret(builder, name, value) |
[AspireExport] |
✅ Correct | String params. |
WithBuildSecret(builder, name, ParameterResource) |
[AspireExport] |
✅ Correct | ParameterResource is ATS-compatible. |
WithVolume(builder, name, target, isReadOnly) |
[AspireExportIgnore] |
✅ Correct | Intentionally ignored — CoreExports.WithVolume provides the polyglot variant with reordered parameters. |
WithVolume(builder, target, isReadOnly) |
[AspireExportIgnore] |
✅ Correct | Same — CoreExports version handles both named and anonymous volumes. |
WithDockerfileFactory(builder, contextPath, Func<DockerfileFactoryContext, string>, stage?) |
[AspireExportIgnore] |
✅ Correct | DockerfileFactoryContext exposes IServiceProvider and IResource — .NET runtime types not usable from polyglot hosts. Callback-free WithDockerfile IS exported. |
WithDockerfileFactory(builder, contextPath, Func<DockerfileFactoryContext, Task<string>>, stage?) |
[AspireExportIgnore] |
✅ Correct | Same — async variant. |
WithBuildArg(builder, name, ExpressionInterpolatedStringHandler) |
[AspireExportIgnore] |
✅ Correct | Compiler-specific interpolation handler type. |
WithBuildSecret(builder, name, ExpressionInterpolatedStringHandler) |
[AspireExportIgnore] |
✅ Correct | Same. |
WithContainerRuntimeArgs(builder, Action<Context>) |
[AspireExportIgnore] |
✅ Correct | ContainerRuntimeArgsCallbackContext exposes IList<object> — not usable from polyglot hosts. |
WithContainerRuntimeArgs(builder, Func<Context, Task>) |
[AspireExportIgnore] |
✅ Correct | Same. |
WithBuildOptions(builder, Action<Context>) |
[AspireExportIgnore] |
✅ Correct | ContainerBuildOptionsCallbackContext exposes IResource and IServiceProvider — not usable from polyglot hosts. |
WithBuildOptions(builder, Func<Context, Task>) |
[AspireExportIgnore] |
✅ Correct | Same. |
WithPushOptions(builder, Action<Context>) |
[AspireExportIgnore] |
✅ Correct | ContainerImagePushOptionsCallbackContext exposes IResource — not usable from polyglot hosts. |
WithPushOptions(builder, Func<Context, Task>) |
[AspireExportIgnore] |
✅ Correct | Same. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
CreateResourceWithCustomState(builder, CustomResourceSnapshot) |
[AspireExportIgnore] |
✅ Correct | CustomResourceSnapshot contains ResourcePropertySnapshot.Value (object?) and ResourceCommandSnapshot.Parameter (object?) — untyped properties that can't be represented in statically-typed polyglot SDKs. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
CreateResourceBuilder<T>(builder, name) |
[AspireExportIgnore] |
✅ Correct | Takes raw IResource generic constraint — low-level builder API for testing scenarios. |
TryCreateResourceBuilder<T>(builder, name, out resourceBuilder) |
[AspireExportIgnore] |
✅ Correct | Uses out parameter which is not ATS-compatible. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
Subscribe<T, TEvent>(builder, Func<TEvent, CT, Task>) (6 overloads) |
[AspireExportIgnore] |
✅ Correct | Complex generic delegates with event/CancellationToken types not ATS-compatible. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
AddDotnetTool(builder, name, tool) |
[AspireExport] |
✅ Correct | String params. |
WithDotnetToolVersion(builder, version) |
[AspireExport] |
✅ Correct | String param. |
WithDotnetToolArgs(builder, args) |
[AspireExport] |
✅ Correct | String array. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
AddExecutable(builder, name, command, wd, params string[]?) |
[AspireExport] |
✅ Correct | All string params. |
AddExecutable(builder, name, command, wd, params object[]?) |
[AspireExportIgnore] |
✅ Correct | object[] is not ATS-compatible. String[] overload IS exported. |
PublishAsDockerFile(builder, Action<IResourceBuilder<ContainerResource>>?) |
[AspireExportIgnore] |
❌ Could be exported | Action<IResourceBuilder<ContainerResource>> is ATS-compatible — IResourceBuilder<ContainerResource> is an exported handle type. The callback is optional. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
AddExternalService(builder, name) |
[AspireExport] |
✅ Correct | String param. |
WithEndpoint(builder, host, port, scheme, endpointName) |
[AspireExport] |
✅ Correct | Primitives only. |
WithHttpHealthCheck(builder, path?, statusCode?) |
[AspireExport] |
✅ Correct | Optional primitives. |
WithHttpHealthCheck(builder, endpointReference, path?, statusCode?) |
[AspireExport] |
✅ Correct | EndpointReference is ATS-compatible. |
WithHttpsHealthCheck(builder, ..., Func<X509Certificate2, bool>?) |
[AspireExportIgnore] |
✅ Correct | Func<X509Certificate2, bool> not ATS-compatible. |
WithHttpsHealthCheck(builder, endpointRef, ..., Func<X509Certificate2, bool>?) |
[AspireExportIgnore] |
✅ Correct | Same. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
AddMcpServer(builder, name, command, wd?, args?) |
[AspireExport] |
✅ Correct | String params. |
WithPromptCommand(builder, name, displayName) |
[AspireExport] |
✅ Correct | String params. |
WithToolCommand(builder, name, displayName) |
[AspireExport] |
✅ Correct | String params. |
WithHttpCommand(builder, name, displayName, Func<HttpRequestMessage>, options?) |
[AspireExportIgnore] |
✅ Correct | Func<HttpRequestMessage> is not ATS-compatible. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
WithOtlpExporter(builder) |
[AspireExport] |
✅ Correct | No params. |
WithOtlpExporterProtocol(builder, protocol) |
[AspireExport] |
✅ Correct | OtlpExportProtocol enum is ATS-compatible. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
AddParameter(builder, name, secret) |
[AspireExport] |
✅ Correct | Primitives only. |
AddParameter(builder, name, value, secret, persist) |
[AspireExport] |
✅ Correct | Primitives only. |
AddParameter(builder, name, ParameterDefault, secret, persist) |
[AspireExportIgnore] |
✅ Correct | ParameterDefault is not exported. |
AddParameter(builder, name, Func<ParameterResource, InteractionInput>, ...) |
[AspireExportIgnore] |
✅ Correct | Complex Func delegate. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
All 6 CreateStep/ConfigurePipeline methods |
[AspireExportIgnore] |
✅ Correct | PipelineStep/PipelineConfigurationContext are infrastructure types not exported for ATS. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
AddProject(builder, name, projectPath, launchProfileName?) |
[AspireExport] |
✅ Correct | String params. This is the canonical polyglot overload. |
WithLaunchProfile(builder, launchProfileName) |
[AspireExport] |
✅ Correct | String param. |
WithDisabledForwardedHeaders(builder) |
[AspireExport] |
✅ Correct | No params. |
AddProject<TProject>(builder, name) |
[AspireExportIgnore] |
✅ Correct | IProjectMetadata generic constraint is .NET-specific. |
AddProject<TProject>(builder, name, Action<Options>) |
[AspireExportIgnore] |
✅ Correct | IProjectMetadata generic constraint is .NET-specific (even though ProjectResourceOptions is ATS-compatible). |
AddProject(builder, name, projectPath, Action<ProjectResourceOptions>) |
[AspireExportIgnore] |
❌ Could be exported | ProjectResourceOptions has only primitive properties (string?, bool, bool) — fully ATS-compatible as a callback context with ExposeProperties = true. |
AddProject(builder, name, projectPath) |
[AspireExportIgnore] |
✅ Correct | Intentional API consolidation — 3-param overload with launchProfileName IS exported. |
AddCSharpApp(builder, name, path, Action<ProjectResourceOptions>) |
[AspireExportIgnore] |
❌ Could be exported | Same as AddProject — ProjectResourceOptions is ATS-compatible. |
PublishAsDockerFile(builder, Action<IResourceBuilder<ContainerResource>>?) |
[AspireExportIgnore] |
❌ Could be exported | Action<IResourceBuilder<ContainerResource>> is ATS-compatible — IResourceBuilder<ContainerResource> is an exported handle. |
WithDebugging(builder, preferLocalTools) |
[AspireExportIgnore] |
Signature is ATS-compatible (just bool), but debugging .NET projects from a polyglot host is meaningless. Both models agree this is a reasonable design exclusion. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
WithRequiredCommand(builder, command, displayName?, Func<Context, Task>?) |
[AspireExportIgnore] |
✅ Correct | RequiredCommandValidationContext exposes IServiceProvider — not usable from polyglot hosts. |
WithRequiredCommand(builder, command, displayName?) |
[AspireExport] |
✅ Correct | String params only (no callback). |
| Method | Capability ID | Verdict |
|---|---|---|
WithEnvironment(builder, name, string) |
withEnvironment |
✅ |
WithEnvironment(builder, name, ParameterResource) |
withEnvironmentFromParameter |
✅ |
WithEnvironment(builder, name, EndpointReference) |
withEnvironmentFromEndpoint |
✅ |
WithEnvironment(builder, name, ReferenceExpression) |
withEnvironmentFromExpression |
✅ |
WithReference(builder, IResourceBuilder<T>) |
withReference |
✅ |
WithReference(builder, IResourceBuilder<T>, envPrefix) |
withReferenceUri |
✅ |
WithReference(builder, IResourceBuilder<ExternalService>) |
withReferenceExternalService |
✅ |
WithReference(builder, EndpointReference) |
withReferenceEndpoint |
✅ |
WithReference(builder, string) |
withServiceReferenceNamed |
✅ |
WithArgs(builder, params string[]) |
withArgs |
✅ |
WithEndpoint(builder, port?, targetPort?, scheme?, name?, env?, isProxied, isExternal?, protocol?) |
withEndpoint |
✅ |
WithHttpsEndpoint(builder, port?, targetPort?, name?, env?, isProxied, isExternal?) |
withHttpsEndpoint |
✅ |
WithHttpEndpoint(builder, port?, targetPort?, name?, env?, isProxied, isExternal?) |
withHttpEndpoint |
✅ |
WithOtlpExporter(builder) |
withOtlpExporter |
✅ |
WithLifetime(builder, ResourceLifetime) |
withLifetime |
✅ |
WithExternalHttpEndpoints(builder) |
withExternalHttpEndpoints |
✅ |
ExcludeFromManifest(builder) |
excludeFromManifest |
✅ |
WaitFor(builder, dependency) |
waitFor |
✅ |
WaitFor(builder, dependency, WaitBehavior) |
waitForWithBehavior |
✅ |
WaitForStart(builder, dependency) |
N/A | ✅ |
WaitForStart(builder, dependency, WaitBehavior) |
N/A | ✅ |
WithAnnotation(builder, annotation, behavior?) |
withAnnotation |
✅ |
WithContainerFiles(builder, sourceConfig) |
withContainerFiles |
✅ |
PublishWithContainerFiles(builder) |
publishWithContainerFiles |
✅ |
WithEntrypoint(builder, entrypoint) |
withEntrypoint |
✅ |
WithBindMount(builder, source, target, isReadOnly) |
withBindMount |
✅ |
WithCertificateTrustScope(builder, scope) |
withCertificateTrustScope |
✅ |
| Method | Verdict | Reason |
|---|---|---|
WithEnvironment(builder, name, ExpressionInterpolatedStringHandler) |
✅ Correct | Compiler-specific type. |
WithEnvironment(builder, name, Func<string>) |
✅ Correct | Raw Func<string> delegate. |
WithEnvironment(builder, name, IResourceBuilder<ExternalServiceResource>) |
✅ Correct | Specialized overload; withReference covers this use case. |
WithEnvironment<T, TValue>(builder, name, TValue, format) |
✅ Correct | Open generic TValue. |
WithArgs(builder, params object[]) |
✅ Correct | object[] not ATS-compatible. String[] overload IS exported. |
WithManifestPublishingCallback (2 overloads) |
✅ Correct | ManifestPublishingContext exposes Utf8JsonWriter (for streaming JSON into the deployment manifest) and DistributedApplicationExecutionContext — .NET runtime types not usable from polyglot hosts. |
WithReferenceRelationship (2 overloads) |
✅ Correct | Takes raw IResource — not ATS-compatible. |
WithReferenceEnvironment(builder, flags) |
ReferenceEnvironmentInjectionFlags is an enum (ATS-compatible), but this is an advanced configuration API not intended for polyglot use. |
|
WithEndpoint(builder, ..., Action<EndpointAnnotation>) |
✅ Correct | EndpointAnnotation has read-only properties AllocatedEndpointSnapshot (ValueSnapshot<AllocatedEndpoint>) and AllAllocatedEndpoints (NetworkEndpointSnapshotList) that are not ATS-compatible. Settable properties are all primitives but callback-free variant already covers them. |
WithEndpoint(builder, endpointName, Action<EndpointAnnotation>, createIfNotExists) |
✅ Correct | Same — EndpointAnnotation has incompatible read-only runtime state properties. |
WithHttpsEndpoint(builder, ..., Action<EndpointAnnotation>) |
✅ Correct | Same — callback-free variant IS exported. |
WithHttpEndpoint(builder, ..., Action<EndpointAnnotation>) |
✅ Correct | Same. |
WithContainerFilesMountSource(builder, Func<Context, Task>) |
✅ Correct | ContainerFileSystemCallbackContext exposes IServiceProvider and IResource — not usable from polyglot hosts. |
WithContainerFileItems(builder, params ContainerFileSystemItem[]) |
✅ Correct | ContainerFileSystemItem is an abstract class hierarchy (ContainerFile, ContainerDirectory, ContainerOpenSSLCertificateFile) with recursive Entries property — polymorphic types not supported by ATS. |
WithHttpProbe(builder, ProbeType type, string? path, ...) |
[AspireExport] via internal stub |
✅ Fixed |
WithHttpProbe(builder, ProbeType, Func<EndpointReference>?, ...) |
✅ Correct | Func<EndpointReference> is not ATS-compatible. |
WithTcpHealthCheck (2 overloads) |
✅ Correct | Func<EndpointReference> not ATS-compatible. |
WithNetworkAlias(builder, alias, NetworkIdentifier?) |
NetworkIdentifier is a simple record(string Value) wrapper, but it's not exported. Could potentially be mapped to string?. |
|
WithAddExistingResource(builder, T resource) |
✅ Correct | Raw IResource instance. |
WithHttpsCertificate (5 overloads) |
✅ Correct | Various X509/StoreName/callback context types. |
WithHttpsCertificateForEndpoints(builder, ...) |
✅ Correct | HttpsEndpointUpdateCallbackContext exposes IServiceProvider and IResource — not usable from polyglot hosts. |
WithDeveloperCertificateForwardingToContainer(builder, ...) |
List<string> endpoint names param — List<T> may not be ATS-compatible vs string[]. Also certificate-specific infrastructure. |
|
WithCertificateTrustScope(builder, Action<Context>) |
✅ Correct | CertificateTrustConfigurationCallbackAnnotationContext exposes IResource — not usable from polyglot hosts. Callback-free version IS exported. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
GenerateImageName(...) |
[AspireExportIgnore] |
✅ Correct | Internal utility, not a builder API. |
GenerateImageTag(...) |
[AspireExportIgnore] |
✅ Correct | Same. |
| Method | Annotation | Verdict | Reason |
|---|---|---|---|
TryGetContainerImageName(resource, out string?) |
[AspireExportIgnore] |
✅ Correct | out parameter. |
TryGetLastAnnotation<T>(resource, out T?) |
[AspireExportIgnore] |
✅ Correct | out param + open generic. |
Seven methods were flagged as
| # | Method | Why Questionable | Why Correctly Ignored |
|---|---|---|---|
| 1 | AddCertificateAuthorityCollection |
Signature is just strings | Return type would auto-register the builder class, but all companion With* methods require X509Certificate2 — resource would be unusable (zero configurable methods) |
| 2 | WithDebugging |
Just a bool param |
Debugging .NET projects from polyglot hosts is meaningless |
| 3 | WithReferenceEnvironment |
ReferenceEnvironmentInjectionFlags is an enum |
Advanced internal configuration; enum not intentionally part of public ATS surface |
| 4 | WithNetworkAlias |
NetworkIdentifier is a simple record |
NetworkIdentifier is not exported as an ATS type |
| 5 | WithDeveloperCertificateForwardingToContainer |
List<string> could map to string[] |
Certificate infrastructure; List<T> not supported (only T[]) |
| 6 | WithEnvironment(ExternalService) |
IResourceBuilder<ExternalServiceResource> is compatible |
Covered by withReference; redundant API surface |
| 7 | WithHttpsCertificate(StoreName, StoreLocation) |
Both are enums | Certificate store APIs are Windows-specific; enums not exported |
| Area | Codex 5.3 | Opus 4.6 | Agreement |
|---|---|---|---|
| Type-incompatible ignores (delegates, X509, out params, etc.) | All ✅ | All ✅ | Full |
| Design-policy ignores (not intended for polyglot) | Some ❌/ |
All ✅/ |
Partial — Codex was more aggressive about wanting to export design-excluded APIs |
WithEndpoint callback vs no-callback variants |
Codex initially ❌ (didn't check both overloads) | ✅ | After verification: Full — callback-free variant IS exported |
AddExecutable string[] vs object[] |
Codex initially ❌ (didn't check both overloads) | After verification: Full — string[] IS exported | |
Reserved keyword type on WithHttpProbe |
Full — both acknowledge it's a codegen limitation |
These are potential improvements identified during the audit that could expand polyglot coverage in future releases:
✅ Fixed via internal stub with renamedWithHttpProbe— Add parameter name remapping support in code generatorsprobeTypeparameterWithNetworkAlias— ExportNetworkIdentifieror map it tostring?to enable this APIAddCertificateAuthorityCollection— Export the resource type to enable CA management in polyglot hostsWithDockerfilecallback variant — IfIResourceBuilder<T>callbacks become ATS-compatible, this could be exportedList<string>support — Add ATS support forList<T>(map to arrays) to enable APIs likeWithDeveloperCertificateForwardingToContainerWithContainerRegistryEndpoint— Already exportable (ContainerRegistryResourceis auto-registered viaAddContainerRegistry)PublishAsDockerFilewith callback —Action<IResourceBuilder<ContainerResource>>is ATS-compatible sinceIResourceBuilder<ContainerResource>is an exported handle (2 overloads: ExecutableResourceBuilderExtensions + ProjectResourceBuilderExtensions)AddProject/AddCSharpAppwithAction<ProjectResourceOptions>—ProjectResourceOptionshas onlystring?,bool,boolproperties — fully ATS-compatible withExposeProperties = true
Scan of all Aspire.Hosting.* packages showing which need an [AspireExport]/[AspireExportIgnore] coverage pass.
| Package | Methods | Exported | Ignored | Uncovered |
|---|---|---|---|---|
| Aspire.Hosting.Azure | 31 | 1 | 0 | 30 |
| Aspire.Hosting.Azure.AIFoundry | 5 | 0 | 0 | 5 |
| Aspire.Hosting.Azure.AppService | 10 | 0 | 0 | 10 |
| Aspire.Hosting.Azure.ContainerRegistry | 3 | 2 | 0 | 1 |
| Aspire.Hosting.Azure.Kusto | 4 | 0 | 0 | 4 |
| Aspire.Hosting.Azure.Redis | 6 | 4 | 0 | 2 |
| Aspire.Hosting.Azure.Sql | 6 | 4 | 0 | 2 |
| Aspire.Hosting.Docker | 7 | 1 | 0 | 6 |
| Aspire.Hosting.JavaScript | 12 | 8 | 0 | 4 |
| Aspire.Hosting.Keycloak | 4 | 0 | 0 | 4 |
| Aspire.Hosting.Kubernetes | 2 | 0 | 0 | 2 |
| Aspire.Hosting.Maui | 1 | 0 | 0 | 1 |
| Aspire.Hosting.Qdrant | 5 | 4 | 0 | 1 |
| Total | 96 | 24 | 0 | 72 |
| Package | Methods | Exported | Ignored |
|---|---|---|---|
| Aspire.Hosting | 198 | 180 | 98 |
| Aspire.Hosting.Azure.AppConfiguration | 5 | 6 | 1 |
| Aspire.Hosting.Azure.AppContainers | 13 | 13 | 1 |
| Aspire.Hosting.Azure.ApplicationInsights | 1 | 2 | 2 |
| Aspire.Hosting.Azure.CognitiveServices | 4 | 5 | 4 |
| Aspire.Hosting.Azure.CosmosDB | 14 | 13 | 1 |
| Aspire.Hosting.Azure.EventHubs | 10 | 9 | 4 |
| Aspire.Hosting.Azure.Functions | 4 | 2 | 2 |
| Aspire.Hosting.Azure.KeyVault | 8 | 7 | 3 |
| Aspire.Hosting.Azure.OperationalInsights | 1 | 1 | 0 |
| Aspire.Hosting.Azure.PostgreSQL | 5 | 6 | 0 |
| Aspire.Hosting.Azure.Search | 1 | 2 | 1 |
| Aspire.Hosting.Azure.ServiceBus | 15 | 14 | 12 |
| Aspire.Hosting.Azure.SignalR | 3 | 2 | 2 |
| Aspire.Hosting.Azure.Storage | 16 | 16 | 1 |
| Aspire.Hosting.Azure.WebPubSub | 3 | 5 | 1 |
| Aspire.Hosting.DevTunnels | 5 | 6 | 5 |
| Aspire.Hosting.Garnet | 6 | 5 | 2 |
| Aspire.Hosting.GitHub.Models | 4 | 4 | 2 |
| Aspire.Hosting.Kafka | 5 | 6 | 0 |
| Aspire.Hosting.Milvus | 7 | 8 | 0 |
| Aspire.Hosting.MongoDB | 9 | 9 | 2 |
| Aspire.Hosting.MySql | 10 | 11 | 0 |
| Aspire.Hosting.Nats | 6 | 5 | 2 |
| Aspire.Hosting.OpenAI | 5 | 5 | 0 |
| Aspire.Hosting.Oracle | 5 | 8 | 0 |
| Aspire.Hosting.Orleans | 0 | 16 | 11 |
| Aspire.Hosting.PostgreSQL | 14 | 16 | 1 |
| Aspire.Hosting.Python | 3 | 9 | 0 |
| Aspire.Hosting.RabbitMQ | 5 | 6 | 0 |
| Aspire.Hosting.Redis | 12 | 14 | 0 |
| Aspire.Hosting.Seq | 2 | 4 | 1 |
| Aspire.Hosting.SqlServer | 7 | 9 | 0 |
| Aspire.Hosting.Valkey | 0 | 5 | 1 |
| Aspire.Hosting.Yarp | 6 | 33 | 0 |