Create Aspire.Hosting.SqlServer exports#14239
Conversation
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 14239Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 14239" |
🎬 CLI E2E Test RecordingsThe following terminal recordings are available for commit
📹 Recordings uploaded automatically from CI run #21524583863 |
|
Add it to the TypeScript apphsot in the playground until we have more tests |
|
I can create an apphost per component with potentially all the methods we export. In a special polyglot folder. Otherwise I am afraid of what the sample would become as we add integrations, we wouldn't even dare to start. With that we could then think about generating the source and build all these apps in the polyglot validation scripts. |
|
That would be a LOT of projects... But maybe a good idea since we essentially do the same today |
There was a problem hiding this comment.
Pull request overview
This PR exports SQL Server hosting extension methods for use in TypeScript apphosts and fixes dev-mode codegen to properly handle transitive dependencies through central package management.
Changes:
- Adds
AspireExportattributes to seven SQL Server extension methods (addSqlServer,addDatabase,withDataVolume,withDataBindMount,withCreationScript,withPassword,withHostPort) - Implements Directory.Packages.props generation in dev mode to ensure consistent transitive dependency versions
- Adds TypeScript playground validation app demonstrating all exported SQL Server methods
Reviewed changes
Copilot reviewed 7 out of 9 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| src/Aspire.Hosting.SqlServer/SqlServerBuilderExtensions.cs | Adds AspireExport attributes to SQL Server extension methods with descriptive names for TypeScript interop |
| src/Aspire.Cli/Projects/AppHostServerProject.cs | Generates Directory.Packages.props for dev mode and removes version constraints from StreamJsonRpc/Protobuf references |
| playground/polyglot/TypeScript/Aspire.Hosting.SqlServer/tsconfig.json | TypeScript configuration for validation playground |
| playground/polyglot/TypeScript/Aspire.Hosting.SqlServer/package.json | NPM package configuration with TypeScript and build tooling dependencies |
| playground/polyglot/TypeScript/Aspire.Hosting.SqlServer/package-lock.json | NPM lock file ensuring reproducible builds |
| playground/polyglot/TypeScript/Aspire.Hosting.SqlServer/apphost.ts | Comprehensive test scenarios validating all exported SQL Server methods |
| playground/polyglot/TypeScript/Aspire.Hosting.SqlServer/apphost.run.json | Runtime configuration for the TypeScript apphost |
| playground/polyglot/TypeScript/Aspire.Hosting.SqlServer/.aspire/settings.json | Aspire CLI settings specifying packages and SDK version |
| .gitignore | Adds exception allowing .aspire folders in polyglot playground apps |
Files not reviewed (1)
- playground/polyglot/TypeScript/Aspire.Hosting.SqlServer/package-lock.json: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| /// <param name="password">The parameter used to provide the administrator password for the SQL Server resource. If <see langword="null"/> a random password will be generated.</param> | ||
| /// <param name="port">The host port for the SQL Server.</param> | ||
| /// <returns>A reference to the <see cref="IResourceBuilder{T}"/>.</returns> | ||
| [AspireExport("addSqlServer", Description = "Adds a SQL Server container resource")] |
There was a problem hiding this comment.
@sebastienros similar to modelcontextprotocol/csharp-sdk#899, would be nice to be able to leverage the existing C# docs for the code-gen.
There was a problem hiding this comment.
I think we'll end up there
commit 412aad7c2b56274e75c8c5666f96c580699b03e8 Merge: 11948bc786 af0e27e Author: Ankit Jain <radical@gmail.com> Date: Sat Jan 31 16:57:35 2026 -0500 Merge remote-tracking branch 'origin/main' into test/validate-scope-scenarios commit af0e27e Author: David Pine <david.pine@microsoft.com> Date: Sat Jan 31 10:55:49 2026 -0600 Expose doc slug in search_docs tool result so that if the LLM decides… (microsoft#14268) * Expose doc slug in search_docs tool result so that if the LLM decides to call get_doc it works. * Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> commit 85fee2a Author: James Newton-King <james@newtonking.com> Date: Sat Jan 31 21:44:47 2026 +0800 Use DefaultTimeout in CLI tests (microsoft#14241) commit 913701a Author: dotnet-maestro[bot] <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri Jan 30 18:40:37 2026 -0800 Update dependencies from https://github.com/microsoft/dcp build 0.22.2 (microsoft#14263) On relative base path root Microsoft.DeveloperControlPlane.darwin-amd64 , Microsoft.DeveloperControlPlane.darwin-arm64 , Microsoft.DeveloperControlPlane.linux-amd64 , Microsoft.DeveloperControlPlane.linux-arm64 , Microsoft.DeveloperControlPlane.linux-musl-amd64 , Microsoft.DeveloperControlPlane.windows-amd64 , Microsoft.DeveloperControlPlane.windows-arm64 From Version 0.22.1 -> To Version 0.22.2 Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com> commit 11948bc786bb251b6dd0a7874a1c668b1a17f509 Author: Ankit Jain <radical@gmail.com> Date: Fri Jan 30 18:42:33 2026 -0500 improve test selection json commit d056f5bcb231fafe866b9626601a36baa36a53bf Author: Ankit Jain <radical@gmail.com> Date: Fri Jan 30 18:37:06 2026 -0500 improve test selection json commit a18bafa5c539876018e1a1e51854c725974fef2c Author: Ankit Jain <radical@gmail.com> Date: Fri Jan 30 18:17:36 2026 -0500 Add NuGet-only validation scenario for packable src change Scenario 18 tests that changing a packable src project (Hosting.Redis) triggers NuGet-dependent test detection via dotnet-affected. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> commit e55fdbd Author: Sébastien Ros <sebastienros@gmail.com> Date: Fri Jan 30 14:57:32 2026 -0800 Create Aspire.Hosting.SqlServer exports (microsoft#14239) * Create Aspire.Hosting.SqlServer exports * Add validation app commit b71c1d56903297d0454998979f63f40a8ffe543b Author: Ankit Jain <radical@gmail.com> Date: Fri Jan 30 17:38:24 2026 -0500 Add NuGet-dependent test detection to TestSelector When a source project that produces a NuGet package (IsPackable=true) or archive (matching packageOrArchiveProducingProjects globs) changes, detect and trigger NuGet-dependent test projects (those with <RequiredNuGetsForTesting>true</RequiredNuGetsForTesting> in their csproj). - Rename <RequiresNuGets> to <RequiredNuGetsForTesting> in 3 test csprojs - Add packageOrArchiveProducingProjects config (schema + JSON) - Add NuGetDependentTestDetector analyzer with IsPackable XML parsing - Integrate detection as step 10 in evaluation flow - Populate NuGetDependentTests for RunAll/CriticalPath cases - Add run_nuget_tests and nuget_test_projects GitHub outputs - Add validation scenario 17 to validate-scenarios.sh - Add unit tests (225 total, all passing) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> commit a5f508f Author: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri Jan 30 11:58:32 2026 -0800 Display pipeline summary info after pipeline succeeds (microsoft#13970) * Display pipeline summary info after pipeline succeeds * Fix concurrency issue * Use options object * Fix build * Update surface API --------- Co-authored-by: Sebastien Ros <sebastienros@gmail.com> commit bc2d7702cd8cdac1d69ee8ed79998973954340bb Author: Ankit Jain <radical@gmail.com> Date: Fri Jan 30 14:52:28 2026 -0500 Update docs to match current TestSelector implementation - Fix config field names: projectMappings→sourceToTestMappings, sourcePattern→source, testPattern→test - Replace core category (triggerAll:true) with top-level triggerAllPaths - Update all example JSON snippets to match real test-selection-rules.json - Add missing categories (cli_e2e, endtoend, playground, polyglot) to examples - Fix CLI examples: --solution is required, --config is optional - Mark NuGet-dependent tests as planned (not yet implemented) - Fix file structure: remove NuGetDependencyChecker.cs, add DotNetAffectedResult.cs - Update testProjectPatterns examples to match real config Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> commit a94d0e0 Author: Ankit Jain <radical@gmail.com> Date: Fri Jan 30 13:59:02 2026 -0500 Make dotnet-affected results additive to pattern-based mappings The union of both sources gives the most complete test coverage: pattern-based mappings provide precise direct matches, while dotnet-affected catches transitive dependencies the mappings miss. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> commit 6bf7f6c Author: Ankit Jain <radical@gmail.com> Date: Fri Jan 30 13:53:28 2026 -0500 Normalize dotnet-affected test project paths to directory format Convert csproj file paths (tests/Foo.Tests/Foo.Tests.csproj) to directory paths with trailing slash (tests/Foo.Tests/) to match the pattern-based mapping format. This ensures proper deduplication when combining results from both sources. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> commit 35a10e0 Author: Ankit Jain <radical@gmail.com> Date: Fri Jan 30 13:51:55 2026 -0500 Normalize dotnet-affected paths from absolute to relative dotnet-affected returns absolute FilePath values but downstream consumers (glob matchers, enumerate-tests action) expect relative paths like "tests/Foo.Tests/Foo.Tests.csproj". Strip the working directory prefix to produce consistent relative paths. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> commit d57670e Author: Ankit Jain <radical@gmail.com> Date: Fri Jan 30 13:50:17 2026 -0500 Fix ParseOutput to recognize dotnet-affected's FilePath JSON key dotnet-affected writes objects with "Name" and "FilePath" keys, but ParseOutput was looking for "path" and "ProjectPath". Added "FilePath" as the first property to check since it's the actual format. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> commit 6de09d5 Author: Ankit Jain <radical@gmail.com> Date: Fri Jan 30 13:45:51 2026 -0500 Fix dotnet-affected output parsing: read affected.json file instead of stdout dotnet-affected --format json writes results to affected.json on disk, not to stdout (stdout contains a human-readable table). The previous code parsed stdout, which yielded nearly zero projects due to truncated table output. Now reads the JSON file, with a stdout fallback. Also deletes any stale affected.json before invoking dotnet-affected to avoid reading outdated results. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> commit a6f89bb Author: Ankit Jain <radical@gmail.com> Date: Fri Jan 30 13:44:53 2026 -0500 temp scenario 14 commit 7e6f9d8 Author: David Pine <david.pine@microsoft.com> Date: Fri Jan 30 12:32:53 2026 -0600 Add unit and end-to-end tests for DocsIndexService and DocsSearchService (microsoft#14200) * Add unit and end-to-end tests for DocsIndexService and DocsSearchService - Implemented comprehensive unit tests for DocsIndexService, covering document listing, searching, and retrieval functionalities. - Added tests for various scenarios including empty results, case insensitivity, and error handling. - Created unit tests for DocsSearchService to validate search response formatting and scoring. - Developed end-to-end tests for MCP documentation tools, ensuring correct integration with the CLI and validation of tool outputs. - Included tests for tool schemas and descriptions to ensure compliance with expected formats. * chore: Address PR review feedback. * chore: Remove McpDocsE2ETests.cs file * Update tests/Aspire.Cli.EndToEnd.Tests/McpDocsE2ETests.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: clarify comment in FetchDocsAsync_NullContent_ReturnsEmptyString test --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> commit 4b9e452 Author: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri Jan 30 12:04:26 2026 -0500 Add test projects for CodeGeneration.Go/Java/Rust to Aspire.slnx (microsoft#14244) * Initial plan * Add test projects for CodeGeneration.Go/Java/Rust to Aspire.slnx Co-authored-by: radical <1472+radical@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: radical <1472+radical@users.noreply.github.com> commit 3f163aa Author: Kieron Lanning <kieronlanning@users.noreply.github.com> Date: Fri Jan 30 15:05:45 2026 +0000 Fix PostgreSQL v18+ data volume path (microsoft#14202) PostgreSQL 18+ changed the default data directory from /var/lib/postgresql/data to /var/lib/postgresql. This commit updates WithDataVolume and WithDataBindMount to automatically detect the PostgreSQL version from the container image tag and use the appropriate data directory path. - Added GetPostgresDataDirectoryPath helper method - Added TryParsePostgresMajorVersion helper method - Updated WithDataVolume to use version-aware path - Updated WithDataBindMount to use version-aware path - Added comprehensive unit tests for version parsing and path selection Fixes microsoft#13792 commit b9d318e Author: David Fowler <davidfowl@gmail.com> Date: Thu Jan 29 21:31:54 2026 -0800 Add Dashboard Telemetry HTTP API (microsoft#14168) * Add Dashboard Telemetry HTTP API This PR adds a REST API to the Dashboard for accessing telemetry data (traces and logs). ## New Endpoints - GET /api/telemetry/traces - List traces with filtering - GET /api/telemetry/traces/{traceId} - Get single trace by ID - GET /api/telemetry/traces/{traceId}/logs - Get logs for a trace - GET /api/telemetry/logs - List logs with filtering - GET /api/telemetry/logs/{logId} - Get single log by ID All endpoints support: - Query parameters: resource, limit, hasError (traces), severity (logs), traceId (logs) - Streaming via ?follow=true (NDJSON format) - JSON responses with dashboard links ## Authentication Introduces unified API authentication with new Dashboard:Api config section: - Dashboard:Api:AuthMode (Unsecured or ApiKey) - Dashboard:Api:PrimaryApiKey - Dashboard:Api:SecondaryApiKey (for key rotation) Backward compatible with existing Dashboard:Mcp config. ### Header Support - Telemetry API: accepts x-api-key header - MCP: accepts both x-api-key (new) and x-mcp-api-key (legacy) ## Files Added - src/Aspire.Dashboard/Api/TelemetryApiService.cs - src/Aspire.Dashboard/Api/TelemetryApiAuthenticationHandler.cs - src/Aspire.Dashboard/Model/Api/TelemetryDtos.cs - src/Aspire.Dashboard/Configuration/ApiAuthMode.cs - tests/Aspire.Dashboard.Tests/Integration/TelemetryApiTests.cs (15 tests) ## Bug Fixes - Fixed severity filter on logs (LevelField case in OtlpLogEntry.GetFieldValue) - Fixed trace lookup by shortened ID * Refactor telemetry API to use OTLP JSON format and streaming repository Changes: - Replace custom DTOs (TraceDto, SpanDto, LogEntryDto, etc.) with standard OTLP JSON format - Add WatchTracesAsync and WatchLogsAsync to TelemetryRepository for push-based streaming - Simplify TelemetryApiService by using TelemetryExportService for JSON conversion - Remove TelemetryDtos.cs - using OtlpTelemetryDataJson from existing serialization - Add TelemetryApiResponse<T> wrapper for list endpoints - Fix bugs: add opt-out resource filtering to streaming, resolve traceId once before loop - Update tests to use new OTLP format API response format is now standard OTLP JSON with wrapper: { "data": { "resourceSpans": [...] or "resourceLogs": [...] }, "totalCount": N, "returnedCount": N } * Fix unbounded memory growth in trace streaming Replace HashSet<string> with DateTime-based tracking: - HashSet grows forever as new traces arrive - DateTime lastSeenTimestamp is fixed 8 bytes - Uses trace.LastUpdatedDate for deduplication Logs already used bounded InternalId tracking. * Implement push-based streaming (O(1) per item) - Add TraceWatcher and LogWatcher classes to receive pushed items - Modify AddTracesCore to push traces to watchers - Modify AddLogsCore to push logs to watchers - Rewrite WatchTracesAsync to yield existing then read from channel - Rewrite WatchLogsAsync with same pattern - Use bounded channels (1000 items) to prevent memory growth - This eliminates O(n) re-query cost on every notification * Fix code review issues in push-based streaming - Fix race condition: register watcher BEFORE getting snapshot - Add deduplication using trace ID and log internal ID - Fix off-by-one error in limit handling for streaming - Complete watcher channels on repository dispose for graceful shutdown * Use O(1) memory for trace deduplication Replace HashSet<string> (up to 320KB for 10k traces) with single DateTime timestamp (8 bytes) for deduplication. * Update spec to reflect OTLP JSON format and push-based streaming * Fix markdown lint - add language to code block * Handle OperationCanceledException in streaming endpoints When clients disconnect from streaming endpoints, catch the expected OperationCanceledException and exit cleanly instead of letting it propagate as an unhandled exception. * Normalize MCP API keys to Api options in PostConfigure This allows Dashboard:Mcp:PrimaryApiKey and SecondaryApiKey to work for the Telemetry API as well as MCP, providing unified auth handling when only the legacy MCP key is configured. Also ensures the auth handler fails explicitly when ApiKey mode is set but no key is configured. * Address PR review feedback - Use AIHelpers.TryGetResource for resource resolution (matches MCP) - Use TelemetryRepository.GetTrace() for single trace lookup - Return 404 for unknown resources, 200 with empty data for trace logs - Use severity GreaterThanOrEqual filter (Error returns Error+Critical) - Remove GetLogById endpoint - Lazy-initialize trace/log watchers in TelemetryRepository - Extract StreamNdjsonAsync helper method - Reorder DashboardOptions.Api below Mcp * Use shared AIHelpers.TryResolveResourceForTelemetry Extract resource resolution logic to AIHelpers so it can be shared between TelemetryApiService, AspireTelemetryMcpTools, and AssistantChatDataContext. * Rename traces API to spans API The API returns spans in OTLP format, not traces. Renamed: - GET /api/telemetry/traces → GET /api/telemetry/spans - GET /api/telemetry/traces/{id} → GET /api/telemetry/spans/{id} - GET /api/telemetry/traces/{id}/logs → GET /api/telemetry/spans/{id}/logs - Added traceId query param to filter spans by trace - GetTraces → GetSpans, GetTraceById → GetSpanById - FollowTracesAsync → FollowSpansAsync - Added TelemetryRepository.GetSpan(spanId) and WatchSpansAsync - Added TelemetryExportService.ConvertSpansToOtlpJson * Address remaining PR review comments - Update spec: rename traces to spans, document 404 for unknown resources - Update spec: document severity filter uses GreaterThanOrEqual - Add NDJSON content-type tests for streaming - Add configuration startup tests (ApiOptions defaults, key inheritance) - Add Dashboard:Api:Enabled setting to enable/disable the API - Update spec with configuration documentation including Enabled option * Fix NDJSON streaming to use compact JSON NDJSON format requires each line to be a single compact JSON object, not indented. Changed ConvertSpanToJson to accept indent parameter and pass indent=false when streaming. * Fix auth mode defaults: use ApiKey when key is configured * Fix code review issues: WithCancellation, query cap, off-by-one, O(1) lookup * Address JamesNK review: remove spanId endpoint, rename handler, simplify options * Refactor: TraceWatcher to SpanWatcher, push spans directly * Lazy init addedLogs list (avoid allocation when no watchers) * Add unit tests for WatchSpansAsync and WatchLogsAsync Add 5 tests covering watcher functionality in TelemetryRepository: - WatchSpansAsync_ReturnsExistingSpans_ThenNewSpans - WatchSpansAsync_CanBeCancelled - WatchSpansAsync_FiltersById_WhenResourceKeyProvided - WatchLogsAsync_ReturnsExistingLogs_ThenNewLogs - WatchLogsAsync_CanBeCancelled * Update spec documentation to reflect final implementation - Update design decisions table (no /{spanId} endpoint) - Update configuration notes (shared API keys with MCP) - Update authentication notes (unsecured warning) - Update files table (new partial class, renamed handler) - Update tests section (21 API tests, 5 watcher tests) * Fix code review issues in watcher implementation 1. Cap initial snapshot to 10,000 items (MaxWatcherSnapshotCount) - Prevents unbounded memory usage on large repositories 2. Drain channel after snapshot to fix race condition - Items that arrive during snapshot read are now properly handled - Prevents data loss in the gap between registration and snapshot 3. Log warning when channel overflow drops data - Consumers now get visibility into data loss - Helps diagnose slow consumer issues * Add trace API endpoints and CLI commands to spec API: - GET /api/telemetry/traces - List trace summaries (grouped spans) - GET /api/telemetry/traces/{traceId} - Get specific trace with all spans CLI commands: - aspire telemetry logs - List/stream logs (supports --follow) - aspire telemetry spans - List/stream raw spans (supports --follow) - aspire telemetry trace - List traces or show waterfall (snapshot only) Streaming support: logs and spans support --follow, traces do not (traces are groupings with no 'complete' signal) * Add trace API endpoints Endpoints: - GET /api/telemetry/traces - List traces in OTLP format - GET /api/telemetry/traces/{traceId} - Get specific trace Both return standard OTLP JSON format (resourceSpans), consistent with spans endpoint. Supports ?resource, ?hasError, ?limit query params for traces list. Adds 5 new tests for trace endpoints (25 total TelemetryApiTests). * Update spec with accurate test list and endpoint descriptions - Fix traces endpoint table (returns OTLP JSON, not summaries) - Update error responses to include trace not found - Update test count to 25 (was 21) - List all test names organized by category * Remove shadowed local MaxQueryCount constant Use the class-level MaxQueryCount constant instead of redefining it locally in GetLogs method. * Address JamesNK PR review feedback - Move unsecured API warning to startup log (not first request) - Add unsecured API warning in dashboard UI - Fix TryParseOptions to return bool with error message - Clear HashSet after drain phase to prevent unbounded growth - Move filter application to watcher push for efficiency - Use EqualsCompositeName instead of GetCompositeName to avoid allocations - Remove unused OpenAPI tag from endpoint group * Add comment explaining HashSet usage for span deduplication * Remove opt-out resource filtering from telemetry API The API returns all telemetry data for all resources. Added TODO comment to consider ExcludeFromApi property in the future if needed. This simplifies the code significantly by removing: - GetOptOutResources helper - IsOptOutResource helper - dashboardClient dependency - All opt-out filtering logic in all methods * Add severity filter to FollowLogs and tests for watcher filtering - Move severity filter from inline to TelemetryFilter passed to WatchLogsAsync - Add WatchLogsAsync_FiltersAppliedWhenPushing test - Add WatchLogsAsync_SeverityFilterApplied test Now 7 watcher tests total (was 5). * Fix off-by-one error in streaming limit handling Previously, when streaming with a limit parameter, the first item after the limit was skipped when switching to streaming mode. Now all items are yielded correctly - the first 'limit' items, then all new items. Added tests: - FollowSpansAsync_WithLimit_DoesNotSkipItems - FollowLogsAsync_WithLimit_DoesNotSkipItems * Fix hasError filter bug and remove dead code - Fix hasError=false not filtering out error spans/traces in GetSpans/GetTraces - Remove unused limit parameter from FollowSpansAsync/FollowLogsAsync (was dead code) - Remove Task.Delay from watcher tests, use TaskCompletionSource for reliability - Add 4 new tests for hasError filter behavior - Update spec and PR description with latest API shape commit d713404 Author: Ankit Jain <radical@gmail.com> Date: Thu Jan 29 20:57:22 2026 -0500 Strip tests.yml to detect_scope + setup_for_tests_lin for validation Temporarily modify CI to validate conditional test scope detection: - Add conditional-test-runs-with-msbuild as a PR trigger branch in ci.yml - Remove all test execution jobs from tests.yml, keeping only detect_scope and setup_for_tests_lin to validate detection logic and test enumeration without burning CI resources Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> commit 526bb5a Author: James Newton-King <james@newtonking.com> Date: Fri Jan 30 08:47:02 2026 +0800 Fix dashboard URL logged in app host to be the actual port (for randomization) (microsoft#14191)
Description
Export all
Aspire.Hosting.SqlServermethods. Verified locally with a custom TypeScript apphost.This required a change in the codegen for dev-mode since the SqlClient assembly is pinned in the source repository when using SqlServer, through health-checks reference. We now point to the same Directory.Packages.props. The JsonRPC and Protobuf references are also only generated in dev-mode so we don't need to render the
<ProjectReference>package conditionally.