diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json index afc112be61..40e17640b5 100644 --- a/.openpublishing.redirection.json +++ b/.openpublishing.redirection.json @@ -1103,6 +1103,46 @@ { "source_path_from_root": "/docs/whats-new/dotnet-docs-aspire-mod2.md", "redirect_url": "https://aspire.dev/whats-new/aspire-13-1/" + }, + { + "source_path_from_root": "/docs/fundamentals/setup-tooling.md", + "redirect_url": "https://aspire.dev/get-started/prerequisites/" + }, + { + "source_path_from_root": "/docs/fundamentals/dotnet-aspire-sdk.md", + "redirect_url": "https://aspire.dev/get-started/aspire-sdk/" + }, + { + "source_path_from_root": "/docs/fundamentals/aspire-sdk-templates.md", + "redirect_url": "https://aspire.dev/get-started/aspire-sdk-templates/" + }, + { + "source_path_from_root": "/docs/fundamentals/aspire-vscode-extension.md", + "redirect_url": "https://aspire.dev/get-started/aspire-vscode-extension/" + }, + { + "source_path_from_root": "/docs/get-started/github-codespaces.md", + "redirect_url": "https://aspire.dev/get-started/github-codespaces/" + }, + { + "source_path_from_root": "/docs/get-started/dev-containers.md", + "redirect_url": "https://aspire.dev/get-started/dev-containers/" + }, + { + "source_path_from_root": "/docs/fundamentals/orchestrate-resources.md", + "redirect_url": "https://aspire.dev/get-started/orchestrate-resources/" + }, + { + "source_path_from_root": "/docs/extensibility/dev-tunnels-integration.md", + "redirect_url": "https://aspire.dev/integrations/devtools/dev-tunnels/" + }, + { + "source_path_from_root": "/docs/deployment/docker-integration.md", + "redirect_url": "https://aspire.dev/integrations/compute/docker/" + }, + { + "source_path_from_root": "/docs/deployment/kubernetes-integration.md", + "redirect_url": "https://aspire.dev/integrations/compute/kubernetes/" } ] } diff --git a/docs/breadcrumb/toc.yml b/docs/breadcrumb/toc.yml index 0ae53a9e89..8c5f214e68 100644 --- a/docs/breadcrumb/toc.yml +++ b/docs/breadcrumb/toc.yml @@ -10,10 +10,6 @@ items: - name: Aspire tocHref: /dotnet/aspire/ topicHref: /dotnet/aspire/index - items: - - name: What's new in Aspire - tocHref: /dotnet/aspire/whats-new/ - topicHref: ../whats-new/index.yml - name: API browser tocHref: /dotnet/api/ topicHref: /dotnet/api/index diff --git a/docs/cli-reference/includes/config-file-description.md b/docs/cli-reference/includes/config-file-description.md deleted file mode 100644 index 02aaf97c28..0000000000 --- a/docs/cli-reference/includes/config-file-description.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -ms.date: 07/11/2025 -ms.topic: include ---- - -Aspire supports a local and global settings file. Settings defined in a local settings file override those set in the global settings file. - -- **Local settings** - - A local settings file is stored at `.aspire/settings.json` under the current directory. - -- **Global settings** - - The global settings file is stored at `$HOME/.aspire/globalsettings.json`. diff --git a/docs/cli-reference/includes/config-settings-table.md b/docs/cli-reference/includes/config-settings-table.md deleted file mode 100644 index 43049d3a7f..0000000000 --- a/docs/cli-reference/includes/config-settings-table.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -ms.date: 09/25/2025 -ms.topic: include ---- - -| Setting | Description | -|--|--| -| `appHostPath` | The path to the AppHost project that the Aspire CLI uses by default. This setting is set by the Aspire CLI when you select a project or when Aspire is first run and detects an AppHost project. | -| `features.execCommandEnabled` | Enables or disables the `exec` command in Aspire CLI. Set to `true` to allow execution features, or `false` to disable them. | -| `features.minimumSdkCheckEnabled` | Enables or disables minimum SDK version checking in Aspire CLI. Set to `true` to enforce SDK version requirements, or `false` to disable the check. | -| `features.orphanDetectionWithTimestampEnabled` | Enables or disables orphan resource detection with timestamp tracking in Aspire CLI. Set to `true` to enable enhanced orphan detection, or `false` to disable it. | -| `features.packageSearchDiskCachingEnabled` | Enables or disables disk caching for package search results in Aspire CLI. Set to `true` to cache search results locally, or `false` to disable caching. | -| `features.showDeprecatedPackages` | Controls whether deprecated packages are shown in search results and package listings. Set to `true` to show deprecated packages, or `false` to hide them. | -| `features.singleFileAppHostEnabled` | Enables or disables support for single-file AppHost projects in Aspire CLI. Set to `true` to enable single-file AppHost support, or `false` to disable it. | -| `features.stagingChannelEnabled` | Enables or disables access to staging channel packages and features in Aspire CLI. Set to `true` to enable staging channel access, or `false` to disable it. | -| `features.updateNotificationsEnabled` | Enables or disables update notifications in Aspire CLI. Set to `true` to show notifications about available updates, or `false` to disable them. | - - \ No newline at end of file diff --git a/docs/cli-reference/includes/mode-preview.md b/docs/cli-reference/includes/mode-preview.md deleted file mode 100644 index d220c730c7..0000000000 --- a/docs/cli-reference/includes/mode-preview.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -ms.date: 07/11/2025 -ms.topic: include ---- - -> [!IMPORTANT] -> This command is in preview and subject to change. diff --git a/docs/cli-reference/includes/option-debug.md b/docs/cli-reference/includes/option-debug.md deleted file mode 100644 index 0d7d67a04e..0000000000 --- a/docs/cli-reference/includes/option-debug.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -ms.date: 07/11/2025 -ms.topic: include ---- -**`-d, --debug`** - - Enable debug logging to the console, which prints detailed information about what Aspire CLI is doing when a command is run. diff --git a/docs/cli-reference/includes/option-help.md b/docs/cli-reference/includes/option-help.md deleted file mode 100644 index 43cb668cda..0000000000 --- a/docs/cli-reference/includes/option-help.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -ms.date: 07/11/2025 -ms.topic: include ---- -**`-?, -h, --help`** - - Prints help and usage documentation for the available commands and options. diff --git a/docs/cli-reference/includes/option-project.md b/docs/cli-reference/includes/option-project.md deleted file mode 100644 index a078225fea..0000000000 --- a/docs/cli-reference/includes/option-project.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -ms.date: 07/11/2025 -ms.topic: include ---- -**`--project`** - - The path to the Aspire AppHost project file. diff --git a/docs/cli-reference/includes/option-version.md b/docs/cli-reference/includes/option-version.md deleted file mode 100644 index 6db6a6547f..0000000000 --- a/docs/cli-reference/includes/option-version.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -ms.date: 07/11/2025 -ms.topic: include ---- -**`--version`** - - Prints the version of the Aspire CLI tool. diff --git a/docs/cli-reference/includes/option-wait.md b/docs/cli-reference/includes/option-wait.md deleted file mode 100644 index 2e8097aaf5..0000000000 --- a/docs/cli-reference/includes/option-wait.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -ms.date: 07/11/2025 -ms.topic: include ---- -**`--wait-for-debugger`** - - Wait for a debugger to attach before running a command. diff --git a/docs/cli-reference/includes/project-search-logic-description.md b/docs/cli-reference/includes/project-search-logic-description.md deleted file mode 100644 index b59c75129f..0000000000 --- a/docs/cli-reference/includes/project-search-logic-description.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -ms.date: 07/11/2025 -ms.topic: include ---- - -The Aspire CLI uses the following logic, in order, to determine which AppHost project to process: - -- The `--project` option. - - This option specifies the path to a project to process. - -- The `.aspire/settings.json` config file. - - If the config file path exists in the current directory, it's used. If not, the CLI walks up the directory structure looking for the config file. If it finds a config file, it reads the `appHostPath` setting value as the project to process. - -- Searches the current directory and subdirectories. - - Starting in the current directory, the CLI gathers all AppHost projects from that directory and below. If a single project is discovered, it's automatically selected. If multiple projects are discovered, they're printed to the terminal for the user to manually select one of the projects. - - Once a project is selected, either automatically or manually, the path to the project is stored in the `.aspire/settings.json` config file. diff --git a/docs/cli/includes/exec-feature-flag-note.md b/docs/cli/includes/exec-feature-flag-note.md deleted file mode 100644 index 2fa272aca3..0000000000 --- a/docs/cli/includes/exec-feature-flag-note.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -ms.topic: include ---- - -> [!IMPORTANT] -> 🧪 **Feature Flag**: The `aspire exec` command is behind a feature flag and **disabled by default** in this release. It must be explicitly enabled for use with `aspire config set features.execCommandEnabled true`. diff --git a/docs/deployment/docker-integration.md b/docs/deployment/docker-integration.md deleted file mode 100644 index d585675359..0000000000 --- a/docs/deployment/docker-integration.md +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: Aspire Docker hosting integration -description: Learn how to use the Aspire Docker hosting integration to deploy your app with Docker Compose. -ms.date: 09/30/2025 -ai-usage: ai-generated ---- - -# Aspire Docker hosting integration - -[!INCLUDE [includes-hosting](../includes/includes-hosting.md)] - -The Aspire Docker hosting integration enables you to deploy your Aspire applications using Docker Compose. This integration models Docker Compose environments as compute resources that can host your application services. When you use this integration, Aspire generates Docker Compose files that define all the services, networks, and volumes needed to run your application in a containerized environment. It supports generating Docker Compose files from your app model for deployment, orchestrating multiple services, including an Aspire dashboard for telemetry visualization, configuring environment variables and service dependencies, and managing container networking and service discovery. - -## Hosting integration - -The Docker hosting integration is available in the [📦 Aspire.Hosting.Docker](https://www.nuget.org/packages/Aspire.Hosting.Docker) NuGet package. - -### [.NET CLI](#tab/dotnet-cli) - -```dotnetcli -dotnet add package Aspire.Hosting.Docker -``` - -### [PackageReference](#tab/package-reference) - -```xml - -``` - ---- - -For more information, see [dotnet add package](/dotnet/core/tools/dotnet-add-package) or [Manage package dependencies in .NET applications](/dotnet/core/tools/dependencies). - -### Add Docker Compose environment resource - -The following example demonstrates how to add a Docker Compose environment to your app model using the method: - -:::code source="snippets/docker/AppHost.cs" id="apphost"::: - -The preceding code: - -- Creates a Docker Compose environment named `compose`. -- Adds a Redis cache service that will be included in the Docker Compose deployment. -- Adds an API service project that will be containerized and included in the deployment. -- Adds a web application that references both the cache and API service. -- Configures all services to be published as Docker Compose services using . - -> [!TIP] -> With the `compose` variable assigned, you can pass that to the API to disambiguate compute resources for solutions that define more than one. Otherwise, the `compose` variable isn't required. - -### Add Docker Compose environment resource with properties - -You can configure various properties of the Docker Compose environment using the method: - -```csharp -builder.AddDockerComposeEnvironment("compose") - .WithProperties(env => - { - env.DefaultContainerRegistry = "myregistry.azurecr.io"; - env.DefaultNetworkName = "my-network"; - env.BuildContainerImages = true; - }); -``` - -### Add Docker Compose environment resource with compose file - -You can customize the generated Docker Compose file using the method: - -```csharp -builder.AddDockerComposeEnvironment("compose") - .ConfigureComposeFile(composeFile => - { - composeFile.Networks.Add("custom-network", new() - { - Driver = "bridge" - }); - }); -``` - -### Add Aspire dashboard resource to environment - -The Docker hosting integration includes an Aspire dashboard for telemetry visualization. You can configure or disable it using the method: - -```csharp -// Enable dashboard with custom configuration -builder.AddDockerComposeEnvironment("compose") - .WithDashboard(dashboard => - { - dashboard.WithHostPort(8080) - .WithForwardedHeaders(enabled: true); - }); - -// Disable dashboard -builder.AddDockerComposeEnvironment("compose") - .WithDashboard(enabled: false); -``` - -The method configures the port used to access the Aspire dashboard from a browser. The method enables forwarded headers processing when the dashboard is accessed through a reverse proxy or load balancer. - -### Publishing and deployment - -To deploy your application using Docker Compose, use the `aspire publish`: - -```Aspire -aspire publish -o docker-compose-artifacts -``` - -For more information, see [aspire publish command reference](../cli-reference/aspire-publish.md). - -This command generates Docker Compose files and all necessary artifacts in the specified output directory. The generated files include: - -- `docker-compose.yml`: The main Docker Compose file defining all services. -- `docker-compose.override.yml`: Override file for development-specific settings. -- `.env`: Environment variables file. -- Service-specific configuration files and scripts. - -After publishing, you can deploy your application using Docker Compose: - -```bash -cd docker-compose-artifacts -docker compose up -d -``` - -### Environment variables - -The Docker hosting integration captures environment variables from your app model and includes them in a `.env` file. This ensures that all configuration is properly passed to the containerized services. - -## Next steps - -- [Deploy Aspire projects to Azure Container Apps using the Aspire CLI](https://aspire.dev/deployment/azure/aca-deployment-aspire-cli/) -- [Building custom deployment pipelines](https://aspire.dev/deployment/custom-deployments/) -- [Docker Compose to AppHost API reference](https://aspire.dev/app-host/docker-compose-to-apphost-reference/) -- [Aspire integrations](https://aspire.dev/integrations/overview/) -- [Aspire GitHub repo](https://github.com/dotnet/aspire) diff --git a/docs/deployment/kubernetes-integration.md b/docs/deployment/kubernetes-integration.md deleted file mode 100644 index cb37fbb5b2..0000000000 --- a/docs/deployment/kubernetes-integration.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: Aspire Kubernetes hosting integration -description: Learn how to use the Aspire Kubernetes hosting integration to generate Kubernetes deployment manifests. -ms.date: 10/01/2025 -uid: deployment/kubernetes-integration ---- - -# Aspire Kubernetes hosting integration - -[!INCLUDE [includes-hosting](../includes/includes-hosting.md)] - -The Aspire Kubernetes hosting integration enables you to generate Kubernetes deployment manifests from your Aspire application model. This integration allows you to define your application's infrastructure and deployment configuration using the familiar Aspire AppHost and then publish it as Kubernetes YAML manifests for deployment to any Kubernetes cluster. - -## Hosting integration - -To get started with the Aspire Kubernetes hosting integration, install the [📦 Aspire.Hosting.Kubernetes](https://www.nuget.org/packages/Aspire.Hosting.Kubernetes) NuGet package in the [AppHost](https://aspire.dev/get-started/app-host/) project. - -### [.NET CLI](#tab/dotnet-cli) - -```dotnetcli -dotnet add package Aspire.Hosting.Kubernetes -``` - -### [PackageReference](#tab/package-reference) - -```xml - -``` - ---- - -For more information, see [dotnet add package](/dotnet/core/tools/dotnet-add-package) or [Manage package dependencies in .NET applications](/dotnet/core/tools/dependencies). - -## Add Kubernetes environment - -After installing the package, add a Kubernetes environment to your AppHost project using the method: - -:::code source="snippets/kubernetes-integration/AppHost.cs" id="apphost"::: - -> [!TIP] -> With the `k8s` variable assigned, you can pass that to the API to disambiguate compute resources for solutions that define more than one. Otherwise, the `k8s` variable isn't required. - -## Configure Kubernetes environment properties - -You can customize the Kubernetes environment using the method: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var api = builder.AddProject("api"); - -builder.AddKubernetesEnvironment("k8s") - .WithProperties(k8s => - { - k8s.HelmChartName = "my-aspire-app"; - }); - -builder.Build().Run(); -``` - -The `WithProperties` method allows you to configure various aspects of the Kubernetes deployment, including the Helm chart name that will be used for generating the Kubernetes resources. - -## Generate Kubernetes manifests - -To generate Kubernetes manifests from your Aspire application, use the `aspire publish` command: - -```Aspire -aspire publish -o k8s-artifacts -``` - -For more information, see [aspire publish command reference](../cli-reference/aspire-publish.md). - -This command generates a complete set of Kubernetes YAML manifests in the specified output directory (`k8s-artifacts` in this example). The generated artifacts include: - -- **Deployments** or **StatefulSets** for your application services. -- **Services** for network connectivity. -- **ConfigMaps** for application configuration. -- **Secrets** for sensitive data. -- **Helm charts** for easier deployment management. - -## Supported resources - -The Kubernetes hosting integration supports converting various Aspire resources to their Kubernetes equivalents: - -- **Project resources** → Deployments or StatefulSets. -- **Container resources** → Deployments or StatefulSets. -- **Connection strings** → ConfigMaps and Secrets. -- **Environment variables** → ConfigMaps and Secrets. -- **Endpoints** → Services and ingress configuration. -- **Volumes** → PersistentVolumes and PersistentVolumeClaims. - -## Deployment considerations - -When deploying to Kubernetes, consider the following: - -### Container images - -Ensure your application projects are configured to build container images. The Kubernetes publisher will reference the container images for your projects. If you haven't specified custom container images, the integration will use parameterized Helm values that you can override during deployment. - -### Resource names - -Resource names in Kubernetes must follow DNS naming conventions. The integration automatically converts Aspire resource names to valid Kubernetes resource names by: - -- Converting to lowercase. -- Replacing invalid characters with hyphens. -- Ensuring names don't start or end with hyphens. - -### Environment-specific configuration - -Use [external parameters](https://aspire.dev/fundamentals/external-parameters/) to configure environment-specific values that should be different between development and production environments. - -## See also - -- [Deploy to Kubernetes](overview.md#deploy-to-kubernetes) -- [Aspire integrations overview](https://aspire.dev/integrations/overview/) -- [Aspire GitHub repo](https://github.com/dotnet/aspire) -- [Kubernetes documentation](https://kubernetes.io/docs/) -- [Helm documentation](https://helm.sh/docs/) diff --git a/docs/extensibility/dev-tunnels-integration.md b/docs/extensibility/dev-tunnels-integration.md deleted file mode 100644 index 37b110d5c3..0000000000 --- a/docs/extensibility/dev-tunnels-integration.md +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Aspire dev tunnels integration (Preview) -description: Learn how to use the Aspire dev tunnels integration to securely expose local endpoints publicly during development. -ms.date: 09/23/2025 ---- - -# Aspire dev tunnels integration (Preview) - -[!INCLUDE [includes-hosting](../includes/includes-hosting.md)] - -[Dev tunnels](/azure/developer/dev-tunnels/overview) allow developers to securely share local web services across the internet. The Aspire dev tunnels integration makes it easy to model dev tunnels in your AppHost projects so that they're automatically managed during development. - -> [!IMPORTANT] -> Dev tunnels are for ad-hoc testing and development, not for production workloads. - -Dev tunnels are useful for: - -- Sharing a running local service (for example, a Web API) with teammates, mobile devices, or webhooks. -- Testing incoming callbacks from external SaaS systems (GitHub / Stripe / etc.) without deploying. -- Quickly publishing a temporary, TLS‑terminated endpoint during development. - -> [!NOTE] -> By default tunnels require authentication and are available only to the user who created them. You can selectively enable anonymous (public) access per tunnel or per individual port. - -## Prerequisites - -Before you create a dev tunnel, you first need to download and install the devtunnel CLI (Command Line Interface) tool that corresponds to your operating system. See the [devtunnel CLI installation documentation](/azure/developer/dev-tunnels/get-started#install) for more details. - -## Hosting integration - -To get started with the Aspire dev tunnels integration, install the [📦 Aspire.Hosting.DevTunnels](https://www.nuget.org/packages/Aspire.Hosting.DevTunnels) NuGet package in the AppHost project. - -### [.NET CLI](#tab/dotnet-cli) - -```dotnetcli -dotnet add package Aspire.Hosting.DevTunnels --prerelease -``` - -### [PackageReference](#tab/package-reference) - -```xml - -``` - ---- - -For more information, see [dotnet add package](/dotnet/core/tools/dotnet-add-package) or [Manage package dependencies in .NET applications](/dotnet/core/tools/dependencies). - -### Add a dev tunnel resource - -In the AppHost project, add a dev tunnel and configure it to expose specific resources: - -:::code source="snippets/dev-tunnels/DevTunnels.AppHost/AppHost.cs"::: - -When you run the AppHost, the dev tunnel is created to expose the web application endpoints publicly. The tunnel URLs are shown in the Aspire dashboard. By default, the tunnel requires authentication and is available only to the user who created it. - -### Allow anonymous access - -To allow anonymous (public) access to the entire tunnel, chain a call to the `WithAnonymousAccess` method: - -:::code source="snippets/dev-tunnels/DevTunnels.AppHost/AppHost.Anonymous.cs" id="anonymous"::: - -The preceding code: - -- Creates a new `IDistributedApplicationBuilder` instance. -- Adds a project reference to the `web` project. -- Adds a dev tunnel named `public-api` that exposes the `web` project. -- Configures the tunnel to allow anonymous access. - -### Configure dev tunnel options - -To configure other options for the dev tunnel, provide the `DevTunnelOptions` to the `AddDevTunnel` method: - -:::code source="snippets/dev-tunnels/DevTunnels.AppHost/AppHost.Options.cs" id="options"::: - -The preceding code: - -- Creates a new `IDistributedApplicationBuilder` instance. -- Adds a project reference to the `web` project. -- Creates a `DevTunnelOptions` instance to configure the tunnel. -- Adds a dev tunnel named `qa` with a specific `tunnelId` that exposes the `web` project. -- Configures the tunnel with a description, labels, and disables anonymous access. - -### Configure for mixed access - -To allow anonymous access to specific endpoints, use the appropriate `WithReference` overload as shown in the following code: - -:::code source="snippets/dev-tunnels/DevTunnels.AppHost/AppHost.MixedAccess.cs" id="mixedaccess"::: - -The preceding code: - -- Creates a new `IDistributedApplicationBuilder` instance. -- Adds a project reference to the `api` project. -- Adds a dev tunnel named `mixed-access` that exposes: - - The `public` endpoint of the `api` project with anonymous access. - - The `admin` endpoint of the `api` project that requires authentication. - -### Service discovery integration - -When another resource references a dev tunnel, environment variables are injected using the [Aspire service discovery](https://aspire.dev/fundamentals/service-discovery/) configuration format. Use the `WithReference` overloads that accept the `IResourceBuilder` parameter to reference a dev tunnel. This injects environment variables like: - -```env -WEB_HTTPS=https://myweb-1234.westeurope.devtunnels.ms/ -services__web__https__0=https://myweb-1234.westeurope.devtunnels.ms/ -``` - -This lets downstream resources use the tunneled address exactly like any other Aspire service discovery entry. - -> [!NOTE] -> Referencing a tunnel delays the consumer resource's start until the tunnel has started and its endpoint is fully allocated. - -> [!IMPORTANT] -> Dev tunnels are a development time concern only and aren't included when publishing or deploying an AppHost, including any service discovery information. - -## Configuration - -### Dev tunnel options - -The `DevTunnelOptions` class provides several configuration options: - -| Property | Description | -|--|--| -| `Description` | A description for the tunnel that appears in the dev tunnels service. | -| `Labels` | A list of labels to apply to the tunnel for organization and filtering. | -| `AllowAnonymous` | Whether to allow anonymous access to the entire tunnel. | - -### Dev tunnel port options - -The `DevTunnelPortOptions` class provides configuration for individual tunnel ports: - -| Property | Description | -|--|--| -| `Protocol` | The protocol to use (`http`, `https`, or `auto`). If not specified, uses the endpoint's scheme. | -| `Description` | A description for this specific port. | -| `Labels` | Labels to apply to this port. | -| `AllowAnonymous` | Whether to allow anonymous access to this specific port. | - -### Security considerations - -- Prefer authenticated tunnels during normal development. -- Only enable anonymous access for endpoints that are safe to expose publicly. -- Treat public tunnel URLs as temporary & untrusted (rate limit / validate input server-side). - -### Tunnel lifecycle - -Dev tunnels automatically: - -- Install the devtunnel CLI if not already available. -- Ensure the user is logged in to the dev tunnels service. -- Create and manage tunnel lifecycle. -- Clean up unmodeled ports from previous runs. -- Provide detailed logging and diagnostics. - -Tunnels will expire after not being hosted for 30 days by default, so they won't be forcibly deleted when the resource or AppHost is stopped. - -### Troubleshooting - -#### Authentication required - -If you see authentication errors, ensure you're logged in to the dev tunnels service: - -```bash -devtunnel user login -``` - -#### Port conflicts - -If you encounter port binding issues, check that no other processes are using the same ports, or configure different ports for your endpoints. - -#### Tunnel not accessible - -Verify that: - -- The tunnel is running and healthy in the Aspire dashboard. -- You're using the correct tunnel URL. -- Anonymous access is configured correctly if accessing without authentication. - -## See also - -- [Dev tunnels service documentation](/azure/developer/dev-tunnels/overview) -- [Dev tunnels FAQ](/azure/developer/dev-tunnels/faq) -- [Aspire service discovery](https://aspire.dev/fundamentals/service-discovery/) -- [Aspire networking overview](https://aspire.dev/fundamentals/networking-overview/) diff --git a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDev.Hosting/MailDev.Hosting.csproj b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDev.Hosting/MailDev.Hosting.csproj index b933301d1e..b21d1c4a4c 100644 --- a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDev.Hosting/MailDev.Hosting.csproj +++ b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDev.Hosting/MailDev.Hosting.csproj @@ -7,7 +7,7 @@ - + diff --git a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.AppHost/MailDevResource.AppHost.csproj b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.AppHost/MailDevResource.AppHost.csproj index d9210a0bfb..f0a843f5a5 100644 --- a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.AppHost/MailDevResource.AppHost.csproj +++ b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.AppHost/MailDevResource.AppHost.csproj @@ -8,7 +8,7 @@ 9c9bfb14-6706-4421-bc93-37cbaebe36d0 - + diff --git a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj index 4f361c451f..491ab7ac57 100644 --- a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj +++ b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj @@ -2,7 +2,7 @@ - + diff --git a/docs/fundamentals/aspire-sdk-templates.md b/docs/fundamentals/aspire-sdk-templates.md deleted file mode 100644 index db1e26bb5a..0000000000 --- a/docs/fundamentals/aspire-sdk-templates.md +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Aspire templates -description: Learn about the Aspire templates and how to use them to create new apps. -ms.date: 03/11/2025 -zone_pivot_groups: dev-environment -uid: dotnet/aspire/templates ---- - -# Aspire templates - -There are a number of Aspire project templates available to you. You can use these templates to create full Aspire solutions, or add individual projects to existing Aspire solutions. - -The Aspire templates are available in the [📦 Aspire.ProjectTemplates](https://www.nuget.org/packages/Aspire.ProjectTemplates) NuGet package. - -## Available templates - -The Aspire templates allow you to create new apps pre-configured with the Aspire solutions structure and default settings. These projects also provide a unified debugging experience across the different resources of your app. - -Aspire templates are available in two categories: solution templates and project templates. Solution templates create a new Aspire solution with multiple projects, while project templates create individual projects that can be added to an existing Aspire solution. - -### Solution templates - -The following Aspire solution templates are available, assume the solution is named _AspireSample_: - - - -- **Aspire Empty App**: A minimal Aspire project that includes the following: - - - [**AspireSample.AppHost**](#app-host): An orchestrator project designed to connect and configure the different projects and services of your app. - - [**AspireSample.ServiceDefaults**](#service-defaults): A Aspire shared project to manage configurations that are reused across the projects in your solution related to [resilience](/dotnet/core/resilience/http-resilience), [service discovery](https://aspire.dev/fundamentals/service-discovery/), and [telemetry](telemetry.md). - - - -- **Aspire Starter App**: In addition to the [**.AppHost**](#app-host) and [**.ServiceDefaults**](#service-defaults) projects, the Aspire Starter App also includes the following: - - - **AspireSample.ApiService**: An [ASP.NET Core Minimal API](/aspnet/core/fundamentals/minimal-apis) project is used to provide data to the frontend. This project depends on the shared [**AspireSample.ServiceDefaults**](#service-defaults) project. - - **AspireSample.Web**: An [ASP.NET Core Blazor App](/aspnet/core/blazor) project with default Aspire service configurations, this project depends on the [**AspireSample.ServiceDefaults**](#service-defaults) project. - - **AspireSample.Test**: Either an [MSTest](#mstest-project), [NUnit](#nunit-project), or [xUnit](#xunit-project) test project with project references to the [**AspireSample.AppHost**](#app-host) and an example _WebTests.cs_ file demonstrating an integration test. - -### Project templates - -The following Aspire project templates are available: - - - -- **Aspire AppHost**: A standalone **.AppHost** project that can be used to orchestrate and manage the different projects and services of your app. - - - - - -- **Aspire Test projects**: These project templates are used to create test projects for your Aspire app, and they're intended to represent functional and integration tests. The test projects include the following templates: - - - **MSTest**: A project that contains MSTest integration of an Aspire AppHost project. - - **NUnit**: A project that contains NUnit integration of an Aspire AppHost project. - - **xUnit**: A project that contains xUnit.net integration of an Aspire AppHost project. - - For more information on the test templates, see [Testing in Aspire](testing.md). - - - -- **Aspire Service Defaults**: A standalone **.ServiceDefaults** project that can be used to manage configurations that are reused across the projects in your solution related to [resilience](/dotnet/core/resilience/http-resilience), [service discovery](https://aspire.dev/fundamentals/service-discovery/), and [telemetry](./telemetry.md). - - > [!IMPORTANT] - > The service defaults project template takes a `FrameworkReference` dependency on `Microsoft.AspNetCore.App`. This may not be ideal for some project types. For more information, see [Aspire service defaults](https://aspire.dev/fundamentals/service-defaults/). - -## Install the Aspire templates - -[!INCLUDE [Install templates](includes/install-templates.md)] - -## Create solutions and projects using templates - -To create an Aspire solution or project, use Visual Studio, Visual Studio Code, or the .NET CLI, and base it on the available templates. Explore additional Aspire templates in the [Aspire samples](https://github.com/dotnet/aspire-samples) repository. - -:::zone pivot="visual-studio" - -To create an Aspire project using Visual Studio, search for *Aspire* in the Visual Studio new project window and select your desired template. - -:::image type="content" source="media/vs-create-dotnet-aspire-proj.png" lightbox="media/vs-create-dotnet-aspire-proj.png" alt-text="Visual Studio: Aspire templates."::: - -Follow the prompts to configure your project or solution from the template, and then select **Create**. - -:::zone-end -:::zone pivot="vscode" - -To create an Aspire project using Visual Studio Code, search for *Aspire* in the Visual Studio Code new project window and select your desired template. - -:::image type="content" source="media/vscode-create-dotnet-aspire-proj.png" lightbox="media/vscode-create-dotnet-aspire-proj.png" alt-text="Visual Studio Code: Aspire templates."::: - -Select the desired location, enter a name, and select **Create**. - -:::zone-end -:::zone pivot="dotnet-cli" - -To create an Aspire solution or project using the .NET CLI, use the [dotnet new](/dotnet/core/tools/dotnet-new) command and specify which template you would like to create. Consider the following examples: - -To create a basic [Aspire AppHost](https://aspire.dev/get-started/app-host/) project targeting the latest .NET version: - -```dotnetcli -dotnet new aspire-apphost -``` - -To create an Aspire starter app, which is a full solution with a sample UI and backing API included: - -```dotnetcli -dotnet new aspire-starter -``` - -> [!TIP] -> Aspire templates default to using the latest .NET version, even when using an earlier version of the .NET CLI. To manually specify the .NET version, use the `--framework ` option, e.g. to create a basic [Aspire AppHost](https://aspire.dev/get-started/app-host/) project targeting .NET 8: -> -> ```dotnetcli -> dotnet new aspire-apphost --framework net8.0 -> ``` - -You need to trust the ASP.NET Core :::no-loc text="localhost"::: certificate before running the app. Run the following command: - -```dotnetcli -dotnet dev-certs https --trust -``` - -For more information, see [Troubleshoot untrusted localhost certificate in Aspire](../troubleshooting/untrusted-localhost-certificate.md). For in-depth details about troubleshooting localhost certificates on Linux, see [ASP.NET Core: GitHub repository issue #32842](https://github.com/dotnet/aspnetcore/issues/32842). - -:::zone-end - -## See also - -- [Aspire SDK](dotnet-aspire-sdk.md) -- [Aspire setup and tooling](setup-tooling.md) -- [Testing in Aspire](testing.md) diff --git a/docs/fundamentals/aspire-vscode-extension.md b/docs/fundamentals/aspire-vscode-extension.md deleted file mode 100644 index 2528d19064..0000000000 --- a/docs/fundamentals/aspire-vscode-extension.md +++ /dev/null @@ -1,193 +0,0 @@ ---- -title: Aspire Visual Studio Code extension -description: Learn how to use the Aspire Visual Studio Code extension to create, configure, run, and deploy Aspire solutions. -ms.date: 10/20/2025 -ms.topic: overview -uid: dotnet/aspire/vscode-extension -ai-usage: ai-assisted ---- - -# Aspire Visual Studio Code extension - -The Aspire Visual Studio Code extension provides a set of commands and tools to streamline your work with Aspire within Visual Studio Code. The extension includes commands to create projects, add integrations, configure solutions, and manage deployments. The extension requires the Aspire CLI and provides similar functionality on the Visual Studio Code command palette. - -[!INCLUDE [aspire-prereqs](../includes/aspire-prereqs.md)] - -In addition, before you can use the Aspire Visual Studio Code extension, you must have the [Aspire CLI](https://aspire.dev/reference/cli/overview/) installed and available on your PATH. - -## Install the Aspire extension - -To install the Aspire VS Code extension: - -1. Open VS Code. -1. Open the Extensions view by selecting **View** > **Extensions** or pressing Ctrl+Shift+X (Windows/Linux) or Cmd+Shift+X (macOS). -1. Search for "Aspire" in the Extensions marketplace. -1. Select the **Aspire** extension published by **Microsoft**. -1. Select **Install**. - - :::image type="content" source="media/install-aspire-code-extension.png" lightbox="media/install-aspire-code-extension.png" alt-text="A screenshot of VS Code showing how to install the Aspire extension."::: - -Alternatively, you can install the extension directly from the [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=microsoft-aspire.aspire-vscode). - -## Access extension commands - -All Aspire extension commands are available from the VS Code Command Palette: - -1. Open the Command Palette by pressing Ctrl+Shift+P (Windows/Linux) or Cmd+Shift+P (macOS). -1. Type "Aspire" to filter and display all available Aspire commands. -1. Select the desired command from the list. - -All commands are grouped under the **Aspire** category in the Command Palette for easy discovery. - -## Available commands - -The Aspire VS Code extension provides the following commands: - -| Command | Description | Availability | -|---------|-------------|--------------| -| Aspire: New Aspire project | Create a new Aspire apphost or starter app from a template. | Available | -| Aspire: Add an integration | Add a hosting integration (`Aspire.Hosting.*`) to the Aspire apphost. | Available | -| Aspire: Configure launch.json | Adds the default Aspire debugger launch configuration to your workspace's `launch.json`, which will detect and run the apphost in the workspace. | Available | -| Aspire: Manage configuration settings | Manage configuration settings including feature flags. | Available | -| Aspire: Open Aspire terminal | Open an Aspire VS Code terminal for working with Aspire projects. | Available | -| Aspire: Publish deployment artifacts | Generates deployment artifacts for an Aspire apphost. | Preview | -| Aspire: Deploy app | Deploy the contents of an Aspire apphost to its defined deployment targets. | Preview | -| Aspire: Update integrations | Update hosting integrations and Aspire SDK in the apphost. | Preview | - -## Create a new Aspire app - -To create a new Aspire app using the extension: - -1. Open the Command Palette (Ctrl+Shift+P or Cmd+Shift+P). -1. Run the **Aspire: New Aspire project** command. -1. Select the desired template: -1. Specify the project name and location. - - :::image type="content" source="media/code-extension-create-aspire-project.png" lightbox="media/code-extension-create-aspire-project.png" alt-text="A screenshot of VS Code showing how to create a new Aspire solution by using the Aspire extension."::: - -The extension creates the project and opens it in VS Code. - -## Add an integration to the Aspire solution - -Aspire integrations provide pre-configured connections to various cloud services and dependencies. To add an integration: - -1. Open the Command Palette. -1. Run the **Aspire: Add an integration** command. -1. Browse or search for the desired integration package. -1. Select the integration to add it to your AppHost project. - -The extension adds the appropriate NuGet package reference to your AppHost project. - -> [!NOTE] -> The **Add an integration** command adds a hosting integration to the AppHost project. It doesn't add the corresponding client integration to any consuming projects. - -## Configure an Aspire solution - -The Aspire extension includes several commands that configure the behavior of Aspire and the Aspire CLI during development: - -### Configure launch.json for debugging - -To run and debug your Aspire application in VS Code, you need to configure the `launch.json` file: - -1. Open the Command Palette. -1. Run the **Aspire: Configure launch.json** command. -1. The extension adds a default Aspire debugger configuration to your workspace's `launch.json` file. - -The default configuration looks like this: - -```json -{ - "type": "aspire", - "request": "launch", - "name": "Aspire: Launch Default AppHost", - "program": "${workspaceFolder}" -} -``` - -You can customize the `program` field to point to a specific AppHost project file. For example: - -```json -{ - "type": "aspire", - "request": "launch", - "name": "Aspire: Launch MyAppHost", - "program": "${workspaceFolder}/MyAppHost/MyAppHost.csproj" -} -``` - -### Manage configuration settings - -The **Aspire: Manage configuration settings** command executes `aspire config` request options and displays the results in the VS Code terminal. Use `get` and `set` commands to configure the Aspire CLI. Use the `list` command to show current configuration values. - -## Run an Aspire solution in development mode - -To run your Aspire application in development mode: - -1. Ensure you have configured `launch.json` as described in the [Configure launch.json for debugging](#configure-launchjson-for-debugging) section. -1. Open the Run and Debug view by selecting **View** > **Run** or pressing Ctrl+Shift+D (Windows/Linux) or Cmd+Shift+D (macOS). -1. Select your Aspire launch configuration from the dropdown. -1. Select the green **Start Debugging** button or press F5. - -The extension builds and starts the AppHost project, launches the Aspire dashboard in your browser, and enables debugging for all resources in your solution. - -Alternatively, you can open an Aspire VS Code terminal using `Aspire: Open Aspire terminal` and run `aspire run --start-debug-session` to start a VS Code debug session. - -### Run or debug from the editor - -When an AppHost project is detected in your workspace, you can also run or debug it directly from the editor. Use the run buttons in the editor title bar when viewing an AppHost file. - -## Publish deployment artifacts - -> [!IMPORTANT] -> This feature is in **Preview**. - -The **Aspire: Publish deployment artifacts** command generates deployment artifacts for your Aspire AppHost. This command serializes resources to disk, allowing them to be consumed by deployment tools. - -To publish deployment artifacts: - -1. Open the Command Palette. -1. Run the **Aspire: Publish deployment artifacts** command. -1. Select the output location for the generated artifacts. - -The command invokes registered publishing callback annotations to generate artifacts such as: - -- Bicep files for Azure resources. -- Docker Compose YAML files. -- Kubernetes Helm charts. - -For more information about Aspire publishing, see [Aspire publishing and deployment overview](https://aspire.dev/deployment/overview/). - -## Deploy an Aspire solution - -> [!IMPORTANT] -> This feature is in **Preview**. - -The **Aspire: Deploy app host** command deploys the contents of an Aspire AppHost to its defined deployment targets. - -To deploy an Aspire solution: - -1. Open the Command Palette. -1. Run the **Aspire: Deploy app host** command. -1. Follow the prompts to select deployment targets and provide any required configuration. - -The command publishes deployment artifacts and then invokes deployment callback annotations to deploy resources to the specified targets. - -For more information about Aspire deployment, see [Aspire publishing and deployment overview](https://aspire.dev/deployment/overview/). - -## Open Aspire terminal - -The **Aspire: Open Aspire terminal** command opens a terminal window configured for working with Aspire projects. This terminal provides easy access to Aspire CLI commands and is preconfigured with the appropriate environment variables. - -## Feedback and issues - -To report issues or request features for the Aspire VS Code extension: - -1. Visit the [Aspire GitHub repository](https://github.com/dotnet/aspire/issues). -1. Create a new issue and add the `area-extension` label. - -## See also - -- [Aspire setup and tooling](setup-tooling.md) -- [Aspire CLI Overview](https://aspire.dev/reference/cli/overview/) -- [Aspire templates](aspire-sdk-templates.md) -- [Aspire VS Code extension on the marketplace](https://marketplace.visualstudio.com/items?itemName=microsoft-aspire.aspire-vscode) diff --git a/docs/fundamentals/dotnet-aspire-sdk.md b/docs/fundamentals/dotnet-aspire-sdk.md deleted file mode 100644 index 1d7a72dd93..0000000000 --- a/docs/fundamentals/dotnet-aspire-sdk.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Aspire SDK -description: Learn -ms.date: 08/07/2025 -uid: dotnet/aspire/sdk ---- - -# Aspire SDK - -The Aspire SDK is intended for [_*.AppHost_ projects](https://aspire.dev/get-started/app-host/#apphost-project), which serve as the Aspire orchestrator. These projects are designated by their usage of the `Aspire.AppHost.Sdk` in the project file. The SDK provides a set of features that simplify the development of Aspire apps. - -## Overview - -The [📦 Aspire.AppHost.Sdk](https://www.nuget.org/packages/Aspire.AppHost.Sdk) is an additive [MSBuild project SDK](/visualstudio/msbuild/how-to-use-project-sdk) for building [Aspire apps](../index.yml). The `Aspire.AppHost.Sdk` is defined with a top-level `Project/Sdk`: - -```xml - - - - - - Exe - net9.0 - - - - - - - - - -``` - -The preceding example project defines the top-level SDK as `Microsoft.NET.Sdk` and the `Aspire.AppHost.Sdk` as an additive SDK. The project also references the `Aspire.Hosting.AppHost` package which brings in a number of Aspire-related dependencies. - -## SDK Features - -The Aspire SDK provides several key features. - -### Project references - -Each `ProjectReference` in the [Aspire AppHost][app-host] project isn't treated as standard project references. Instead, they enable the _AppHost_ to execute these projects as part of its orchestration. Each project reference triggers a generator to create a `class` that represents the project as an . This metadata is used to populate the named projects in the generated `Projects` namespace. When you call the API, the `Projects` namespace is used to reference the project—passing the generated class as a generic-type parameter. - -> [!TIP] -> If you need to reference a project in the traditional way within the AppHost, set the `IsAspireProjectResource` attribute on the `ProjectReference` element to `false`, as shown in the following example: -> -> ```xml -> -> ``` -> -> Otherwise, by default, the `ProjectReference` is treated as Aspire project resource. - -### Orchestrator dependencies - -The Aspire SDK dynamically adds references to the [Aspire dashboard](https://aspire.dev/dashboard/overview/) and other AppHost dependencies, such as the developer control plane (DCP) packages. These dependencies are specific to the platform that the AppHost is built on. - -When the AppHost project runs, the orchestrator relies on these dependencies to provide the necessary functionality to the AppHost. For more information, see [Aspire orchestration overview][app-host]. - -[app-host]: https://aspire.dev/get-started/app-host/ diff --git a/docs/fundamentals/orchestrate-resources.md b/docs/fundamentals/orchestrate-resources.md deleted file mode 100644 index 54b2a0d41d..0000000000 --- a/docs/fundamentals/orchestrate-resources.md +++ /dev/null @@ -1,328 +0,0 @@ ---- -title: Orchestrate resources in Aspire -description: Learn techniques to control the behavior of Aspire resources such as project, containers, and executable resources. -ms.date: 08/07/2025 -uid: dotnet/aspire/orchestrate-resources ---- - -# Orchestrate resources in Aspire - -In this article, you learn how to customize the behavior of resources further by writing code in the AppHost project. In Aspire, a **resource** is a dependent part of a cloud-native application. Resource types include: - -- **.NET Project**: A custom microservice, responsible for specific functionality in your cloud-native application, and often built by a separate team of developers. -- **Executable**: If you need to build microservices with tools like Node.js or Orleans, they run as executable resources. -- **Container**: You can add Docker containers, based on specific images to your Aspire solution. -- **Integration resources**: Integrations often add resources such as databases, caches, and messaging services to your application. -- **External service**: Represents a third-party API or service that your application depends on but isn't managed by Aspire. Use this for resources like public APIs or SaaS endpoints. - -For the fundamentals of Aspire orchestration and how it manages resources, see [Aspire orchestration overview](https://aspire.dev/get-started/app-host/). - -## Resource naming conventions - -Resources in Aspire must follow naming restrictions set by Aspire and the technology that resource represents. For example, an Aspire resource has a maximum name length of 64 characters, but an Azure Container App has a maximum length of 32. When you publish the Aspire container resource for Azure, the name must not exceed 32 characters in length. - -Aspire resource names must follow these basic rules: - -- **Must** be between 1 and 64 characters in length. -- **Must** start with an ASCII letter. -- **Must** contain only ASCII letters, digits, and hyphens. -- **Must not** end with a hyphen. -- **Must not** contain consecutive hyphens. - -## Configure explicit resource start - -Project, executable, and container resources are automatically started with your distributed application by default. A resource can be configured to wait for an explicit startup instruction with the method. A resource configured with is initialized with . - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var postgres = builder.AddPostgres("postgres"); -var postgresdb = postgres.AddDatabase("postgresdb"); - -builder.AddProject("dbmigration") - .WithReference(postgresdb) - .WithExplicitStart(); -``` - -In the preceding code the `"dbmigration"` resource is configured to not automatically start with the distributed application. - -Resources with explicit start can be started from the Aspire dashboard by clicking the "Start" command. For more information, see [Aspire dashboard: Stop or Start a resource](https://aspire.dev/dashboard/explore/#stop-or-start-a-resource). - -## Waiting for resources - -In some cases, you might want to wait for a resource to be ready before starting another resource. For example, you might want to wait for a database to be ready before starting an API that depends on it. To express this dependency, use the method: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var postgres = builder.AddPostgres("postgres"); -var postgresdb = postgres.AddDatabase("postgresdb"); - -builder.AddProject("apiservice") - .WithReference(postgresdb) - .WaitFor(postgresdb); -``` - -In the preceding code, the "apiservice" project resource waits for the "postgresdb" database resource to enter the state. The example code shows the [Aspire PostgreSQL integration](https://aspire.dev/integrations/databases/postgres/postgres-get-started/), but the same pattern can be applied to other resources. - -Other cases might warrant waiting for a resource to run to completion, either or before the dependent resource starts. To wait for a resource to run to completion, use the method: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var postgres = builder.AddPostgres("postgres"); -var postgresdb = postgres.AddDatabase("postgresdb"); - -var migration = builder.AddProject("migration") - .WithReference(postgresdb) - .WaitFor(postgresdb); - -builder.AddProject("apiservice") - .WithReference(postgresdb) - .WaitForCompletion(migration); -``` - -In the preceding code, the "apiservice" project resource waits for the "migration" project resource to run to completion before starting. The "migration" project resource waits for the "postgresdb" database resource to enter the state. This can be useful in scenarios where you want to run a database migration before starting the API service, for example. - -### Forcing resource start in the dashboard - -Waiting for a resource can be bypassed using the **Start** command in the dashboard. Selecting **Start** on a waiting resource in the dashboard instructs it to start immediately without waiting for the resource to be healthy or completed. This can be useful when you want to test a resource immediately and don't want to wait for the app to be in the right state. - -## APIs for adding and expressing resources - -Aspire [hosting integrations](https://aspire.dev/integrations/overview/#hosting-integrations) and [client integrations](https://aspire.dev/integrations/overview/#client-integrations) are both delivered as NuGet packages, but they serve different purposes. While _client integrations_ provide client library configuration for consuming apps outside the scope of the AppHost, _hosting integrations_ provide APIs for expressing resources and dependencies within the AppHost. For more information, see [Aspire integrations overview: Integration responsibilities](https://aspire.dev/integrations/overview/#integration-responsibilities). - -## Express container resources - -To express a you add it to an instance by calling the method: - -### [Docker](#tab/docker) - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var ollama = builder.AddContainer("ollama", "ollama/ollama") - .WithBindMount("ollama", "/root/.ollama") - .WithBindMount("./ollamaconfig", "/usr/config") - .WithHttpEndpoint(port: 11434, targetPort: 11434, name: "ollama") - .WithEntrypoint("/usr/config/entrypoint.sh") - .WithContainerRuntimeArgs("--gpus=all"); -``` - -For more information, see [GPU support in Docker Desktop](https://docs.docker.com/desktop/gpu/). - -### [Podman](#tab/podman) - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var ollama = builder.AddContainer("ollama", "ollama/ollama") - .WithBindMount("ollama", "/root/.ollama") - .WithBindMount("./ollamaconfig", "/usr/config") - .WithHttpEndpoint(port: 11434, targetPort: 11434, name: "ollama") - .WithEntrypoint("/usr/config/entrypoint.sh") - .WithContainerRuntimeArgs("--device", "nvidia.com/gpu=all"); -``` - -For more information, see [GPU support in Podman](https://github.com/containers/podman/issues/19005). - ---- - -The preceding code adds a container resource named "ollama" with the image `ollama/ollama`. The container resource is configured with multiple bind mounts, a named HTTP endpoint, an entrypoint that resolves to Unix shell script, and container run arguments with the method. - -### Customize container resources - -All subclasses can be customized to meet your specific requirements. This can be useful when using a [hosting integration](https://aspire.dev/integrations/overview/#hosting-integrations) that models a container resource, but requires modifications. When you have an `IResourceBuilder` you can chain calls to any of the available APIs to modify the container resource. Aspire container resources typically point to pinned tags, but you might want to use the `latest` tag instead. - -To help exemplify this, imagine a scenario where you're using the [Aspire Redis integration](https://aspire.dev/integrations/caching/redis/). If the Redis integration relies on the `7.4` tag and you want to use the `latest` tag instead, you can chain a call to the API: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var cache = builder.AddRedis("cache") - .WithImageTag("latest"); - -// Instead of using the "7.4" tag, the "cache" -// container resource now uses the "latest" tag. -``` - -For more information and additional APIs available, see . - -### Container resource lifecycle - -When the AppHost is run, the is used to determine what container image to create and start. Under the hood, Aspire runs the container using the defined container image by delegating calls to the appropriate OCI-compliant container runtime, either Docker or Podman. The following commands are used: - -#### [Docker](#tab/docker) - -First, the container is created using the `docker container create` command. Then, the container is started using the `docker container start` command. - -- [docker container create](https://docs.docker.com/reference/cli/docker/container/create/): Creates a new container from the specified image, without starting it. -- [docker container start](https://docs.docker.com/reference/cli/docker/container/start/): Start one or more stopped containers. - -These commands are used instead of `docker run` to manage attached container networks, volumes, and ports. Calling these commands in this order allows any IP (network configuration) to already be present at initial startup. - -#### [Podman](#tab/podman) - -First, the container is created using the `podman container create` command. Then, the container is started using the `podman container start` command. - -- [podman container create](https://docs.podman.io/en/latest/markdown/podman-create.1.html): Creates a writable container layer over the specified image and prepares it for running. -- [podman container start](https://docs.podman.io/en/latest/markdown/podman-start.1.html): Start one or more stopped containers. - -These commands are used instead of `podman run` to manage attached container networks, volumes, and ports. Calling these commands in this order allows any IP (network configuration) to already be present at initial startup. - ---- - -Beyond the base resource types, , , and , Aspire provides extension methods to add common resources to your app model. For more information, see [Hosting integrations](https://aspire.dev/integrations/overview/#hosting-integrations). - -### Container resource lifetime - -By default, container resources use the _session_ container lifetime. This means that every time the AppHost process is started, the container is created and started. When the AppHost stops, the container is stopped and removed. Container resources can opt-in to a _persistent_ lifetime to avoid unnecessary restarts and use persisted container state. To achieve this, chain a call the API and pass : - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var ollama = builder.AddContainer("ollama", "ollama/ollama") - .WithLifetime(ContainerLifetime.Persistent); -``` - -The preceding code adds a container resource named "ollama" with the image "ollama/ollama" and a persistent lifetime. - -## Express external service resources - -External services are third-party APIs and services that your application depends on but that exist outside your Aspire solution. These services are already running elsewhere and aren't managed by Aspire. To express an you add it to an instance by calling the method: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var nuget = builder.AddExternalService("nuget", "https://api.nuget.org/") - .WithHttpHealthCheck(path: "/v3/index.json"); - -var frontend = builder.AddProject("frontend") - .WithReference(nuget); -``` - -The preceding code adds an external service resource named "nuget" that points to the NuGet API. The external service is configured with an HTTP health check to monitor its availability. The frontend project can then reference this external service for service discovery. - -External services support several configuration approaches: - -### Static URL configuration - -You can configure an external service with a static URL using either a string or a URI: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Using a string URL -var nuget = builder.AddExternalService("nuget", "https://api.nuget.org/"); - -// Using a URI -var uri = new Uri("https://api.example.com/"); -var api = builder.AddExternalService("external-api", uri); -``` - -### Parameter-based URL configuration - -For scenarios where the external service URL might vary between environments or needs to be configurable, you can use parameters: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var externalServiceUrl = builder.AddParameter("external-service-url"); -var externalService = builder.AddExternalService("external-service", externalServiceUrl); - -var frontend = builder.AddProject("frontend") - .WithReference(externalService); -``` - -When using parameter-based configuration, the URL value can be set through configuration, environment variables, or user secrets. During development, Aspire might prompt you to provide the URL value. For more information, see [External parameters](https://aspire.dev/fundamentals/external-parameters/). - -### External service URL requirements - -External service URLs must meet specific requirements: - -- **Must** be an absolute URI (include scheme, host, and optional port). -- **Must** have the absolute path set to "/" (no additional path segments). -- **Must not** contain query parameters or fragments. - -Valid examples: - -- `https://api.example.com/` -- `http://localhost:8080/` -- `https://service.example.com:9443/` - -Invalid examples: - -- `https://api.example.com/v1/api` (contains path) -- `https://api.example.com/?version=1` (contains query) -- `https://api.example.com/#section` (contains fragment) - -### Health checks for external services - -External services can be configured with HTTP health checks to monitor their availability: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var api = builder.AddExternalService("api", "https://api.example.com/") - .WithHttpHealthCheck(path: "/health", statusCode: 200); -``` - -The `WithHttpHealthCheck` method adds a health check that periodically polls the external service. You can specify: - -- **`path`**: The relative path for the health check endpoint (optional, defaults to no additional path). -- **`statusCode`**: The expected HTTP status code (optional, defaults to 200). - -### Service discovery with external services - -When you reference an external service from another resource, Aspire automatically configures service discovery by injecting environment variables in the standard format: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var api = builder.AddExternalService("api", "https://api.example.com/"); - -var frontend = builder.AddProject("frontend") - .WithReference(api); -``` - -This configuration injects environment variables like `API_HTTPS=https://api.example.com/` and `services__api__https__0=https://api.example.com/` into the frontend project, enabling service discovery through both simplified and .NET-specific service discovery mechanisms. - -### External service lifecycle - -External services implement , meaning they're not managed by Aspire's lifecycle system. They're expected to be running independently. During development, external services appear in the Aspire dashboard with a "Running" state if they're reachable, or show health check failures if they're not available. - -## Resource relationships - -Resource relationships link resources together. Relationships are informational and don't impact an app's runtime behavior. Instead, they're used when displaying details about resources in the dashboard. For example, relationships are visible in the [dashboard's resource details](https://aspire.dev/dashboard/explore/#resource-details), and `Parent` relationships control resource nesting on the resources page. - -Relationships are automatically created by some app model APIs. For example: - -- adds a relationship to the target resource with the type `Reference`. -- adds a relationship to the target resource with the type `WaitFor`. -- Adding a database to a DB container creates a relationship from the database to the container with the type `Parent`. - -Relationships can also be explicitly added to the app model using and . - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var catalogDb = builder.AddPostgres("postgres") - .WithDataVolume() - .AddDatabase("catalogdb"); - -builder.AddProject("migration") - .WithReference(catalogDb) - .WithParentRelationship(catalogDb); - -builder.Build().Run(); -``` - -The preceding example uses to configure `catalogdb` database as the `migration` project's parent. The `Parent` relationship is special because it controls resource nesting on the resource page. In this example, `migration` is nested under `catalogdb`. - -> [!NOTE] -> There's validation for parent relationships to prevent a resource from having multiple parents or creating a circular reference. These configurations can't be rendered in the UI, and the app model will throw an error. - -## See also - -- [Aspire orchestration overview](https://aspire.dev/get-started/app-host/) -- [Eventing in Aspire](https://aspire.dev/app-host/eventing/) diff --git a/docs/fundamentals/setup-tooling.md b/docs/fundamentals/setup-tooling.md deleted file mode 100644 index 8e44d7f247..0000000000 --- a/docs/fundamentals/setup-tooling.md +++ /dev/null @@ -1,265 +0,0 @@ ---- -title: Aspire tooling -description: Learn about essential tooling concepts for Aspire. -ms.date: 10/01/2025 -zone_pivot_groups: dev-environment -uid: dotnet/aspire/setup-tooling -ms.custom: sfi-image-nochange ---- - -# Aspire setup and tooling - -Aspire includes tooling to help you create and configure cloud-native apps. The tooling includes useful starter project templates and other features to streamline getting started with Aspire for Visual Studio, Visual Studio Code, and CLI workflows. In the sections ahead, you learn how to work with Aspire tooling and explore the following tasks: - -> [!div class="checklist"] -> -> - Install Aspire and its dependencies -> - Create starter project templates using Visual Studio, Visual Studio Code, or the .NET CLI -> - Install Aspire integrations -> - Work with the Aspire dashboard - -## Install Aspire prerequisites - -To work with Aspire, you need the following installed locally: - -- [.NET 8.0](https://dotnet.microsoft.com/download/dotnet/8.0) or [.NET 9.0](https://dotnet.microsoft.com/download/dotnet/9.0). - - Starting with Aspire 9.4, [.NET 10 Preview 5 or later](https://dotnet.microsoft.com/download/dotnet/10.0) is supported. -- An OCI compliant container runtime, such as: - - [Docker Desktop](https://www.docker.com/products/docker-desktop) - - [Podman](https://podman.io/) - - _For more information, see [Container runtime](#container-runtime)_. -- An Integrated Developer Environment (IDE) or code editor, such as: - - [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) version 17.9 or higher (Optional) - - [Visual Studio Code](https://code.visualstudio.com/) (Optional) - - [C# Dev Kit: Extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit) (Optional) - - [JetBrains Rider with Aspire plugin](https://blog.jetbrains.com/dotnet/2024/02/19/jetbrains-rider-and-the-net-aspire-plugin/) (Optional) - -> [!TIP] -> Alternatively, you can develop Aspire solutions using [GitHub Codespaces](../get-started/github-codespaces.md) or [Dev Containers](../get-started/dev-containers.md). - -:::zone pivot="visual-studio" - -Visual Studio 2022 17.9 or higher includes the latest [Aspire SDK](dotnet-aspire-sdk.md) by default when you install the Web & Cloud workload. - -:::zone-end -:::zone pivot="vscode,dotnet-cli" - - - -:::zone-end - -## Aspire templates - -Aspire provides a set of solution and project templates. These templates are available in your favorite .NET developer integrated environment. You can use these templates to create full Aspire solutions, or add individual projects to existing Aspire solutions. - -### Install the Aspire templates - -[!INCLUDE [Install templates](includes/install-templates.md)] - -### List the Aspire templates - -:::zone pivot="visual-studio" - -The Aspire templates are installed automatically when you install Visual Studio 17.9 or later. To see what Aspire templates are available, select **File** > **New** > **Project** in Visual Studio, and search for "Aspire" in the search bar (Alt+S). You see a list of available Aspire project templates: - -:::image type="content" source="media/vs-create-dotnet-aspire-proj.png" alt-text="Visual Studio: Create new project and search for 'Aspire'." lightbox="media/vs-create-dotnet-aspire-proj.png"::: - -:::zone-end -:::zone pivot="vscode" - -To view the available templates in Visual Studio Code with the C# DevKit installed, select the **Create .NET Project** button when no folder is opened in the **Explorer** view: - -:::image type="content" source="media/vscode-create-dotnet-proj.png" alt-text="Visual Studio Code: Create .NET Project button." lightbox="media/vscode-create-dotnet-proj.png"::: - -Then, search for "Aspire" in the search bar to see the available Aspire project templates: - -:::image type="content" source="media/vscode-create-dotnet-aspire-proj.png" alt-text="Visual Studio Code: Create new project and search for 'Aspire'." lightbox="media/vscode-create-dotnet-aspire-proj.png"::: - -:::zone-end -:::zone pivot="dotnet-cli" - -To verify that the Aspire templates are installed, use the [dotnet new list](/dotnet/core/tools/dotnet-new-list) command, passing in the `aspire` template name: - -```dotnetcli -dotnet new list aspire -``` - -Your console output should look like the following: - -[!INCLUDE [dotnet-new-list-aspire-output](includes/dotnet-new-list-aspire-output.md)] - -:::zone-end - -For more information, see [Aspire templates](aspire-sdk-templates.md). - -## Container runtime - -Aspire can run containers using several OCI-compatible runtimes, including Docker Desktop and Podman. While some users have reported success using [Rancher Desktop](https://rancherdesktop.io/)—particularly when configured to use the Docker CLI—this isn't an officially supported or regularly tested scenario. It might be possible to use Rancher Desktop with the default installation, but it's not an officially supported or validated approach. If you encounter issues with Rancher Desktop, please let us know, but be aware that fixes might not be prioritized. - -- [Docker Desktop](https://www.docker.com/products/docker-desktop/) is the most popular container runtime among Aspire developers, offering a familiar and widely supported environment for building and running containers. -- [Podman](https://podman.io/docs/installation) is an open-source, daemonless alternative to Docker. It supports building and running Open Container Initiative (OCI) containers, making it a flexible choice for developers who prefer a lightweight solution. - -If your host environment has a Docker and Podman installed, Aspire defaults to using Docker. You can instruct Aspire to use Podman instead, by setting the `ASPIRE_CONTAINER_RUNTIME` environment variable to `podman`: - -## [Linux](#tab/linux) - -```bash -export ASPIRE_CONTAINER_RUNTIME=podman -``` - -For more information, see [Install Podman on Linux](https://podman.io/docs/installation#installing-on-linux). - -## [Windows](#tab/windows) - -```powershell -[System.Environment]::SetEnvironmentVariable("ASPIRE_CONTAINER_RUNTIME", "podman", "User") -``` - -For more information, see [Install Podman on Windows](https://podman.io/docs/installation#installing-on-mac--windows). - ---- - -### WSL (Windows Subsystem for Linux) considerations - -When using Podman with WSL, ensure that the `podman` executable is available in your `PATH` and not just defined as a shell alias. Aspire resolves container runtimes by searching for the executable in the system PATH, and shell aliases aren't recognized during this process. - -**Common issues and solutions:** - -- **Podman installed in a separate WSL distribution**: If Podman is installed in a different WSL distribution than your Aspire application, the `podman` command might not be available in your current distribution's PATH. - - **Solution**: Install Podman directly in the WSL distribution where you're running your Aspire application, or create a symbolic link to the Podman executable in a directory that's in your PATH (such as `/usr/local/bin`). - -- **Using shell aliases**: If you have a shell alias like `alias podman='podman-remote-static-linux_amd64'` in your `~/.bash_aliases` or similar file, Aspire won't be able to find the container runtime. - - **Solution**: Instead of using an alias, create a symbolic link or add the directory containing the Podman executable to your PATH: - - ```bash - # Option 1: Create a symbolic link - sudo ln -s /path/to/podman-remote-static-linux_amd64 /usr/local/bin/podman - - # Option 2: Add to PATH in your shell profile - echo 'export PATH="/path/to/podman/directory:$PATH"' >> ~/.bashrc - source ~/.bashrc - ``` - -**Verify your setup**: You can verify that Podman is correctly configured by running: - -```bash -which podman -podman --version -``` - -Both commands should succeed and return valid results before running your Aspire application. - -> [!TIP] -> If you encounter issues with Podman in WSL environments, see [Container runtime 'podman' could not be found in WSL](../troubleshooting/podman-wsl-not-found.md) for specific troubleshooting guidance. - -## Aspire dashboard - -Aspire templates that expose the [AppHost](https://aspire.dev/get-started/app-host/) project also include a useful developer [dashboard](https://aspire.dev/dashboard/overview/) that's used to monitor and inspect various aspects of your app, such as logs, traces, and environment configurations. This dashboard is designed to improve the local development experience and provides an overview of the overall state and structure of your app. - -The Aspire dashboard is only visible while the app is running and starts automatically when you start the _*.AppHost_ project. Visual Studio and Visual Studio Code launch both your app and the Aspire dashboard for you automatically in your browser. If you start the app using the .NET CLI, copy and paste the dashboard URL from the output into your browser, or hold Ctrl and select the link (if your terminal supports hyperlinks). - -The left navigation provides links to the different parts of the dashboard, each of which you explore in the following sections. - -:::image type="content" source="../get-started/media/aspire-dashboard.png" lightbox="../get-started/media/aspire-dashboard.png" alt-text="A screenshot of the Aspire dashboard Projects page."::: - -The Aspire dashboard is also available in a standalone mode. For more information, see [Standalone Aspire dashboard](https://aspire.dev/dashboard/standalone/). - -:::zone pivot="visual-studio" - -## Visual Studio tooling - -Visual Studio provides extra features for working with Aspire integrations and the AppHost orchestrator project. Not all of these features are currently available in Visual Studio Code or through the CLI. - -### Add an integration package - -You add Aspire integrations to your app like any other NuGet package using Visual Studio. However, Visual Studio also provides UI options to add Aspire integrations directly. - -1. In Visual Studio, right select on the project you want to add an Aspire integration to and select **Add** > **Aspire package...**. - - :::image type="content" loc-scope="visual-studio" source="../media/visual-studio-add-aspire-package.png" lightbox="../media/visual-studio-add-aspire-package.png" alt-text="The Visual Studio context menu displaying the Add Aspire Component option."::: - -1. The package manager opens with search results preconfigured (populating filter criteria) for Aspire integrations, allowing you to easily browse and select the desired integration. - - :::image type="content" loc-scope="visual-studio" source="../media/visual-studio-add-aspire-comp-nuget.png" lightbox="../media/visual-studio-add-aspire-comp-nuget.png" alt-text="The Visual Studio context menu displaying the Add Aspire integration options."::: - -For more information on Aspire integrations, see [Aspire integrations overview](https://aspire.dev/integrations/overview/). - -### Add hosting packages - -Aspire hosting packages are used to configure various resources and dependencies an app might depend on or consume. Hosting packages are differentiated from other integration packages in that they're added to the _*.AppHost_ project. To add a hosting package to your app, follow these steps: - -1. In Visual Studio, right select on the _*.AppHost_ project and select **Add** > **Aspire package...**. - - :::image type="content" loc-scope="visual-studio" source="../media/visual-studio-add-aspire-hosting-package.png" lightbox="../media/visual-studio-add-aspire-hosting-package.png" alt-text="The Visual Studio context menu displaying the Add Aspire Hosting Resource option."::: - -1. The package manager opens with search results preconfigured (populating filter criteria) for Aspire hosting packages, allowing you to easily browse and select the desired package. - - :::image type="content" loc-scope="visual-studio" source="../media/visual-studio-add-aspire-hosting-nuget.png" lightbox="../media/visual-studio-add-aspire-hosting-nuget.png" alt-text="The Visual Studio context menu displaying the Add Aspire resource options."::: - -### Add orchestration projects - -You can add Aspire orchestration projects to an existing app using the following steps: - -1. In Visual Studio, right select on an existing project and select **Add** > **Aspire Orchestrator Support..**. - - :::image type="content" loc-scope="visual-studio" source="../media/visual-studio-add-aspire-orchestrator.png" lightbox="../media/visual-studio-add-aspire-orchestrator.png" alt-text="The Visual Studio context menu displaying the Add Aspire Orchestrator Support option."::: - -1. A dialog window opens with a summary of the _*.AppHost_ and _*.ServiceDefaults_ projects that are added to your solution. - - :::image type="content" loc-scope="visual-studio" source="../media/add-orchestrator-app.png" alt-text="A screenshot showing the Visual Studio add Aspire orchestration summary."::: - -1. Select **OK** and the following changes are applied: - - - The _*.AppHost_ and _*.ServiceDefaults_ orchestration projects are added to your solution. - - A call to `builder.AddServiceDefaults` will be added to the _:::no-loc text="Program.cs":::_ file of your original project. - - A reference to your original project will be added to the _:::no-loc text="AppHost.cs":::_ file of the _*.AppHost_ project. - -For more information on Aspire orchestration, see [Aspire orchestration overview](https://aspire.dev/get-started/app-host/). - -### Enlist in orchestration - -Visual Studio provides the option to **Enlist in Aspire orchestration** during the new project workflow. Select this option to have Visual Studio create _*.AppHost_ and _*.ServiceDefaults_ projects alongside your selected project template. - -:::image type="content" loc-scope="visual-studio" source="../media/aspire-enlist-orchestration.png" lightbox="../media/aspire-enlist-orchestration.png" alt-text="A screenshot showing how to enlist in Aspire orchestration."::: - -### Create test project - -When you're using Visual Studio, and you select the **Aspire Start Application** template, you have the option to include a test project. This test project is an xUnit project that includes a sample test that you can use as a starting point for your tests. - -:::image type="content" source="media/setup-tooling/create-test-projects-template.png" lightbox="media/setup-tooling/create-test-projects-template.png" alt-text="A screenshot of Visual Studio displaying the option to create a test project."::: - -For more information, see [Write your first Aspire test](https://aspire.dev/testing/write-your-first-test/). - -:::zone-end -:::zone pivot="vscode" - -## Visual Studio Code tooling - -You can use Visual Studio Code, with the [C# Dev Kit extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit), to create and develop Aspire projects. To create a new Aspire project in Visual Studio Code, select the **Create .NET Project** button in the **Explorer** view, then select one of the Aspire templates: - -:::image type="content" source="media/vscode-create-dotnet-aspire-proj.png" lightbox="media/vscode-create-dotnet-aspire-proj.png" alt-text="A screenshot showing how to create a new Aspire project in Visual Studio Code."::: - -Once you create a new Aspire project, you run and debug the app, stepping through breakpoints, and inspecting variables using the Visual Studio Code debugger: - -:::image type="content" source="media/setup-tooling/vscode-debugging.png" lightbox="media/setup-tooling/vscode-debugging.png" alt-text="A screenshot showing how to debug an Aspire project in Visual Studio Code."::: - -The [Aspire Visual Studio Code extension](aspire-vscode-extension.md) provides additional commands and tooling to streamline working with Aspire projects, including commands to add integrations, configure launch settings, publish deployment artifacts, and deploy applications. - -:::zone-end - -## Aspire CLI - -The Aspire CLI (`aspire` command) is a cross-platform tool that provides command-line functionality to create, manage, run, and publish polyglot Aspire projects. Use the Aspire CLI to streamline development workflows and coordinate services for distributed applications. - -For more information, see [Aspire CLI Overview](https://aspire.dev/reference/cli/overview/) and [Install Aspire CLI](https://aspire.dev/reference/cli/overview/). - -## See also - -- [Use Dev Proxy with Aspire project](/microsoft-cloud/dev/dev-proxy/how-to/use-dev-proxy-with-dotnet-aspire) -- [Aspire CLI Overview](https://aspire.dev/reference/cli/overview/) diff --git a/docs/fundamentals/snippets/build-container-images/apphost/AppHost.csproj b/docs/fundamentals/snippets/build-container-images/apphost/AppHost.csproj index 69c8ea1ba4..cef0f37526 100644 --- a/docs/fundamentals/snippets/build-container-images/apphost/AppHost.csproj +++ b/docs/fundamentals/snippets/build-container-images/apphost/AppHost.csproj @@ -10,8 +10,8 @@ - - + + diff --git a/docs/fundamentals/snippets/lifecycles/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/fundamentals/snippets/lifecycles/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj index c32f8ff6cd..4b57725ab3 100644 --- a/docs/fundamentals/snippets/lifecycles/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj +++ b/docs/fundamentals/snippets/lifecycles/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj @@ -8,6 +8,6 @@ d1fafd31-bb63-479d-bc2b-a4067786068f - + \ No newline at end of file diff --git a/docs/fundamentals/snippets/lifecycles/AspireApp/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj b/docs/fundamentals/snippets/lifecycles/AspireApp/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj index aa87191045..1bdf1a34fd 100644 --- a/docs/fundamentals/snippets/lifecycles/AspireApp/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj +++ b/docs/fundamentals/snippets/lifecycles/AspireApp/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj @@ -10,8 +10,8 @@ - - + + diff --git a/docs/fundamentals/snippets/template/YourAppName/YourAppName.ServiceDefaults.csproj b/docs/fundamentals/snippets/template/YourAppName/YourAppName.ServiceDefaults.csproj index 79f45b9bd2..1bdf1a34fd 100644 --- a/docs/fundamentals/snippets/template/YourAppName/YourAppName.ServiceDefaults.csproj +++ b/docs/fundamentals/snippets/template/YourAppName/YourAppName.ServiceDefaults.csproj @@ -10,13 +10,13 @@ - - - - - - - + + + + + + + diff --git a/docs/get-started/dev-containers.md b/docs/get-started/dev-containers.md deleted file mode 100644 index 14776c7b9e..0000000000 --- a/docs/get-started/dev-containers.md +++ /dev/null @@ -1,315 +0,0 @@ ---- -title: Dev Containers in Visual Studio Code -description: Learn how to use Aspire with Dev Containers in Visual Studio Code. -ms.date: 02/25/2025 ---- - -# Aspire and Visual Studio Code Dev Containers - -The [Dev Containers Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) provides a way for development teams to develop within a containerized environment where all dependencies are preconfigured. With Aspire 9.1, there's added logic to better support working with Aspire within a Dev Container environment by automatically configuring port forwarding. - -Before Aspire 9.1, it possible to use Aspire within a Dev Container, however more manual configuration was required. - -## Dev Containers vs. GitHub Codespaces - -Using Dev Containers in Visual Studio Code is similar to using GitHub Codespaces. With the release of Aspire 9.1, support for both Dev Containers in Visual Studio Code and GitHub Codespaces was enhanced. Although the experiences are similar, there are some differences. For more information on using Aspire with GitHub Codespaces, see [Aspire and GitHub Codespaces](github-codespaces.md). - -## Quick start using template repository - -To configure Dev Containers in Visual Studio Code, use the _.devcontainer/devcontainer.json file in your repository. The simplest way to get started is by creating a new repository from our [template repository](https://github.com/dotnet/aspire-devcontainer). Consider the following steps: - -1. [Create a new repository](https://github.com/new?template_name=aspire-devcontainer&template_owner=dotnet) using our template. - - :::image source="media/new-repository-from-template.png" lightbox="media/new-repository-from-template.png" alt-text="Create new repository."::: - - Once you provide the details and select **Create repository**, the repository is created and shown in GitHub. - -1. Clone the repository to your local developer workstation using the following command: - - ```dotnetcli - git clone https://github.com/// - ``` - -1. Open the repository in Visual Studio Code. After a few moments Visual Studio Code detects the _.devcontainer/devcontainer.json_ file and prompt to open the repository inside a container. Select whichever option is most appropriate for your workflow. - - :::image source="media/reopen-in-container.png" lightbox="media/reopen-in-container.png" alt-text="Prompt to open repository inside a container."::: - - After a few moments, the list of files become visible and the local build of the dev container will be completed. - - :::image source="media/devcontainer-build-completed.png" lightbox="media/devcontainer-build-completed.png" alt-text="Dev Container build completed."::: - -1. Open a new terminal window in Visual Studio Code (Ctrl+Shift+\`) and create a new Aspire project using the `dotnet` command-line. - - ```dotnetcli - dotnet new aspire-starter -n HelloAspire - ``` - - After a few moments, the project will be created and initial dependencies restored. - -1. Open the _ProjectName.AppHost/AppHost.cs_ file in the editor and select the run button on the top right corner of the editor window. - - :::image source="media/vscode-run-button.png" lightbox="media/vscode-run-button.png" alt-text="Run button in editor."::: - - Visual Studio Code builds and starts the Aspire AppHost and automatically opens the Aspire Dashboard. Because the endpoints hosted in the container are using a self-signed certificate the first time, you access an endpoint for a specific Dev Container you're presented with a certificate error. - - :::image source="media/browser-certificate-error.png" lightbox="media/browser-certificate-error.png" alt-text="Browser certificate error."::: - - The certificate error is expected. Once you've confirmed that the URL being requested corresponds to the dashboard in the Dev Container you can ignore this warning. - - :::image source="media/aspire-dashboard-in-devcontainer.png" lightbox="media/aspire-dashboard-in-devcontainer.png" alt-text="Aspire dashboard running in Dev Container."::: - - Aspire automatically configures forwarded ports so that when you select on the endpoints in the Aspire dashboard they're tunneled to processes and nested containers within the Dev Container. - -1. Commit changes to the GitHub repository - - After successfully creating the Aspire project and verifying that it launches and you can access the dashboard, it's a good idea to commit the changes to the repository. - -## Manually configuring _devcontainer.json_ - -The preceding walkthrough demonstrates the streamlined process of creating a Dev Container using the Aspire Dev Container template. If you already have an existing repository and wish to utilize Dev Container functionality with Aspire, add a _devcontainer.json_ file to the _.devcontainer_ folder within your repository: - -```Directory -└───📂 .devcontainer - └─── devcontainer.json -``` - -The [template repository](https://github.com/dotnet/aspire-devcontainer) contains a copy of the _devcontainer.json_ file that you can use as a starting point, which should be sufficient for Aspire. The following JSON represents the latest version of the _.devcontainer/devcontainer.json_ file from the template: - -:::code language="json" source="~/aspire-devcontainer/.devcontainer/devcontainer.json"::: - -## Dev Container scenarios - -The basic Aspire Dev Container template works well for simple scenarios, but you might need additional configuration depending on your specific requirements. The following sections provide examples for various common scenarios. - -### Stateless .NET apps only - -For simple Aspire projects that only use .NET project resources without external containers or complex orchestration, you can use a minimal Dev Container configuration: - -```json -{ - "name": "Aspire - Simple", - "image": "mcr.microsoft.com/devcontainers/dotnet:9.0-bookworm", - "onCreateCommand": "dotnet new install Aspire.ProjectTemplates --force", - "postStartCommand": "dotnet dev-certs https --trust", - "customizations": { - "vscode": { - "extensions": [ - "ms-dotnettools.csdevkit" - ] - } - } -} -``` - -This minimal configuration is suitable for Aspire apps that orchestrate only .NET services without external dependencies. - -### Adding Node.js resources - -If your Aspire app includes Node.js resources, add the Node.js feature to your Dev Container: - -```json -{ - "name": "Aspire with Node.js", - "image": "mcr.microsoft.com/devcontainers/dotnet:9.0-bookworm", - "features": { - "ghcr.io/devcontainers/features/node:1": { - "version": "lts" - } - }, - "onCreateCommand": "dotnet new install Aspire.ProjectTemplates --force", - "postStartCommand": "dotnet dev-certs https --trust", - "customizations": { - "vscode": { - "extensions": [ - "ms-dotnettools.csdevkit", - "ms-vscode.vscode-typescript-next" - ] - } - } -} -``` - -This configuration provides both .NET and Node.js development capabilities within the same container environment. - -### Container orchestration with Docker-in-Docker - -When your Aspire app orchestrates container resources, you need Docker-in-Docker (DinD) support. Here's a basic configuration: - -```json -{ - "name": "Aspire with Containers", - "image": "mcr.microsoft.com/devcontainers/dotnet:9.0-bookworm", - "features": { - "ghcr.io/devcontainers/features/docker-in-docker:2": { - "version": "latest", - "enableNonRootDocker": true, - "moby": true - } - }, - "hostRequirements": { - "cpus": 4, - "memory": "16gb", - "storage": "32gb" - }, - "onCreateCommand": "dotnet new install Aspire.ProjectTemplates --force", - "postStartCommand": "dotnet dev-certs https --trust", - "customizations": { - "vscode": { - "extensions": [ - "ms-dotnettools.csdevkit", - "ms-azuretools.vscode-docker" - ] - } - } -} -``` - -#### Advanced container networking - -If you encounter networking issues between containers or need IPv6 support, you can add additional network configuration: - -```json -{ - "name": "Aspire with Advanced Networking", - "image": "mcr.microsoft.com/devcontainers/dotnet:9.0-bookworm", - "features": { - "ghcr.io/devcontainers/features/docker-in-docker:2": { - "version": "latest", - "enableNonRootDocker": true, - "moby": true - } - }, - "runArgs": [ - "--sysctl", - "net.ipv6.conf.all.disable_ipv6=0", - "--sysctl", - "net.ipv6.conf.default.forwarding=1", - "--sysctl", - "net.ipv6.conf.all.forwarding=1" - ], - "hostRequirements": { - "cpus": 8, - "memory": "32gb", - "storage": "64gb" - }, - "onCreateCommand": "dotnet new install Aspire.ProjectTemplates --force", - "postStartCommand": "dotnet dev-certs https --trust", - "customizations": { - "vscode": { - "extensions": [ - "ms-dotnettools.csdevkit", - "ms-azuretools.vscode-docker" - ] - } - } -} -``` - -> [!IMPORTANT] -> **Docker-in-Docker considerations:** -> -> - Docker-in-Docker requires higher resource allocation including increased CPU, memory, and storage. -> - The advanced networking configuration above includes IPv6 forwarding settings that may be needed for complex container-to-container communication scenarios. -> - This configuration works with Docker Desktop but may have limitations with Rancher Desktop. -> - Network connectivity between containers might require additional configuration depending on your specific use case. - -### Dapr integration examples - -For Aspire apps that integrate with Dapr, you can set up Dapr components in your Dev Container. For more information, see [Aspire Dapr integration](https://aspire.dev/integrations/frameworks/dapr/). - -#### Basic Dapr setup - -```json -{ - "name": "Aspire with Dapr", - "image": "mcr.microsoft.com/devcontainers/dotnet:9.0-bookworm", - "features": { - "ghcr.io/devcontainers/features/docker-in-docker:2": { - "enableNonRootDocker": true - }, - "ghcr.io/dapr/cli/dapr-cli:0": {} - }, - "onCreateCommand": "dotnet new install Aspire.ProjectTemplates --force", - "postCreateCommand": "dotnet dev-certs https --trust && dapr init", - "customizations": { - "vscode": { - "extensions": [ - "ms-dotnettools.csdevkit", - "ms-azuretools.vscode-dapr" - ] - } - } -} -``` - -#### Dapr with external backends - -For more complex Dapr scenarios that use external backends (Redis, PostgreSQL), you can use Docker Compose: - -```json -{ - "name": "Aspire with Dapr and Backends", - "image": "mcr.microsoft.com/devcontainers/dotnet:9.0-bookworm", - "features": { - "ghcr.io/devcontainers/features/docker-in-docker:2": { - "enableNonRootDocker": true - }, - "ghcr.io/dapr/cli/dapr-cli:0": {} - }, - "runArgs": [ - "--sysctl", - "net.ipv6.conf.all.disable_ipv6=0" - ], - "onCreateCommand": "dotnet new install Aspire.ProjectTemplates --force", - "postCreateCommand": [ - "dotnet dev-certs https --trust", - "docker compose up -d", - "dapr init" - ], - "customizations": { - "vscode": { - "extensions": [ - "ms-dotnettools.csdevkit", - "ms-azuretools.vscode-dapr", - "ms-azuretools.vscode-docker" - ] - } - } -} -``` - -## Common considerations - -When using Dev Containers with Aspire, keep the following considerations in mind: - -**Resource requirements** - -- **Basic .NET apps**: Standard Dev Container resources are sufficient for simple scenarios. -- **Container orchestration**: A minimum of 8 CPUs, 32GB memory, and 64GB storage is recommended. -- **Complex scenarios with Dapr/Kubernetes**: Higher resource allocation is recommended for optimal performance. - -**Networking** - -- IPv6 configuration may be required for container-to-container communication. -- Port forwarding is automatically handled by Aspire 9.1 and later versions. -- External service connectivity depends on your container runtime configuration. - -**Performance** - -- Docker-in-Docker scenarios incur performance overhead compared to native Docker. -- Consider using Docker outside of Docker (DooD) for production workflows. -- Local development and deployment scenarios may require different configurations. - -**Security** - -- Dev Containers run with elevated privileges when using Docker-in-Docker. -- SSL certificate trust is handled automatically in most scenarios. -- Consider security implications when exposing ports in cloud environments. - -## See also - -- [Aspire and GitHub Codespaces](github-codespaces.md) -- [Aspire Dapr integration](https://aspire.dev/integrations/frameworks/dapr/) -- [Visual Studio Dev Containers](https://aka.ms/vs/devcontainers) -- [Add Dockerfiles to your .NET app model](https://aspire.dev/app-host/withdockerfile/) -- [Dev Containers specification](https://containers.dev/implementors/spec/) diff --git a/docs/get-started/github-codespaces.md b/docs/get-started/github-codespaces.md deleted file mode 100644 index 402ef4c30c..0000000000 --- a/docs/get-started/github-codespaces.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Aspire and GitHub Codespaces -description: Learn how to use Aspire with GitHub Codespaces. -ms.date: 02/24/2025 ---- - -# Aspire and GitHub Codespaces - -[GitHub Codespaces](https://github.com/features/codespaces) offers a cloud-hosted development environment based on Visual Studio Code. It can be accessed directly from a web browser or through Visual Studio Code locally, where Visual Studio Code acts as a client connecting to a cloud-hosted backend. With Aspire 9.1, comes logic to better support GitHub Codespaces including: - -- Automatically configure port forwarding with the correct protocol. -- Automatically translate URLs in the Aspire dashboard. - -Before Aspire 9.1 it was still possible to use Aspire within a GitHub Codespace, however more manual configuration was required. - -## GitHub Codespaces vs. Dev Containers - -GitHub Codespaces builds upon Visual Studio Code and the [Dev Containers specification](https://containers.dev/implementors/spec/). In addition to supporting GitHub Codespaces, Aspire 9.1 enhances support for using Visual Studio Code and locally hosted Dev Containers. While the experiences are similar, there are some differences. For more information, see [Aspire and Visual Studio Code Dev Containers](dev-containers.md). - -## Quick start using template repository - -To configure GitHub Codespaces for Aspire, use the _.devcontainer/devcontainer.json_ file in your repository. The simplest way to get started is by creating a new repository from our [template repository](https://github.com/dotnet/aspire-devcontainer). Consider the following steps: - -1. [Create a new repository](https://github.com/new?template_name=aspire-devcontainer&template_owner=dotnet) using our template. - - :::image source="media/new-repository-from-template.png" lightbox="media/new-repository-from-template.png" alt-text="Create new repository."::: - - Once you provide the details and select **Create repository**, the repository is created and shown in GitHub. - -1. From the new repository, select on the Code button and select the Codespaces tab and then select **Create codespace on main**. - - :::image source="media/create-codespace-from-repository.png" lightbox="media/create-codespace-from-repository.png" alt-text="Create codespace"::: - - After you select **Create codespace on main**, you navigate to a web-based version of Visual Studio Code. Before you use the Codespace, the containerized development environment needs to be prepared. This process happens automatically on the server and you can review progress by selecting the **Building codespace** link on the notification in the bottom right of the browser window. - - :::image source="media/building-codespace-image.png" lightbox="media/building-codespace-image.png" alt-text="Building codespace"::: - - When the container image has finished being built the **Terminal** prompt appears which signals that the environment is ready to be interacted with. - - :::image source="media/codespace-terminal.png" lightbox="media/codespace-terminal.png" alt-text="Codespace terminal prompt"::: - - At this point, the Aspire templates have been installed and the ASP.NET Core developer certificate has been added and accepted. - -1. Create a new Aspire project using the starter template. - - ```dotnetcli - dotnet new aspire-starter --name HelloAspire - ``` - - This results in many files and folders being created in the repository, which are visible in the **Explorer** panel on the left side of the window. - - :::image source="media/codespaces-explorer-panel.png" lightbox="media/codespaces-explorer-panel.png" alt-text="Codespaces Explorer panel"::: - -1. Launch the AppHost via the _HelloAspire.AppHost/AppHost.cs_ file, by selecting the **Run project** button near the top-right corner of the **Tab bar**. - - :::image source="media/codespace-launch-apphost.png" lightbox="media/codespace-launch-apphost.png" alt-text="Launch AppHost in Codespace"::: - - After a few moments the **Debug Console** panel is displayed, and it includes a link to the Aspire dashboard exposed on a GitHub Codespaces endpoint with the authentication token. - - :::image source="media/codespaces-debug-console.png" lightbox="media/codespaces-debug-console.png" alt-text="Codespaces debug console"::: - -1. Open the Aspire dashboard by selecting the dashboard URL in the **Debug Console**. This opens the Aspire dashboard in a separate tab within your browser. - - You notice on the dashboard that all HTTP/HTTPS endpoints defined on resources have had their typical `localhost` address translated to a unique fully qualified subdomain on the `app.github.dev` domain. - - :::image source="media/codespaces-translated-urls.png" lightbox="media/codespaces-translated-urls.png" alt-text="Codespaces translated URLs"::: - - Traffic to each of these endpoints is automatically forwarded to the underlying process or container running within the Codespace. This includes development time tools such as PgAdmin and Redis Insight. - - > [!NOTE] - > In addition to the authentication token embedded within the URL of the dashboard link of the **Debug Console**, endpoints also require authentication via your GitHub identity to avoid port forwarded endpoints being accessible to everyone. For more information on port forwarding in GitHub Codespaces, see [Forwarding ports in your codespace](https://docs.github.com/codespaces/developing-in-a-codespace/forwarding-ports-in-your-codespace?tool=webui). - -1. Commit changes to the GitHub repository. - - GitHub Codespaces doesn't automatically commit your changes to the branch you're working on in GitHub. You have to use the **Source Control** panel to stage and commit the changes and push them back to the repository. - - Working in a GitHub Codespace is similar to working with Visual Studio Code on your own machine. You can checkout different branches and push changes just like you normally would. In addition, you can easily spin up multiple Codespaces simultaneously if you want to quickly work on another branch without disrupting your existing debug session. For more information, see [Developing in a codespace](https://docs.github.com/codespaces/developing-in-a-codespace/developing-in-a-codespace?tool=webui). - -1. Clean up your Codespace. - - GitHub Codespaces are temporary development environments and while you might use one for an extended period of time, they should be considered a disposable resource that you recreate as needed (with all of the customization/setup contained within the _devcontainer.json_ and associated configuration files). - - To delete your GitHub Codespace, visit the GitHub Codespaces page. This shows you a list of all of your Codespaces. From here you can perform management operations on each Codespace, including deleting them. - - GitHub charges for the use of Codespaces. For more information, see [Managing the cost of GitHub Codespaces in your organization](https://docs.github.com/codespaces/managing-codespaces-for-your-organization/choosing-who-owns-and-pays-for-codespaces-in-your-organization). - - > [!NOTE] - > Aspire supports the use of Dev Containers in Visual Studio Code independent of GitHub Codespaces. For more information on how to use Dev Containers locally, see [Aspire and Dev Containers in Visual Studio Code](dev-containers.md). - -## Manually configuring _devcontainer.json_ - -The preceding walkthrough demonstrates the streamlined process of creating a GitHub Codespace using the Aspire Devcontainer template. If you already have an existing repository and wish to utilize Devcontainer functionality with Aspire, add a _devcontainer.json_ file to the _.devcontainer_ folder within your repository: - -```Directory -└───📂 .devcontainer - └─── devcontainer.json -``` - -The [template repository](https://github.com/dotnet/aspire-devcontainer) contains a copy of the _devcontainer.json_ file that you can use as a starting point, which should be sufficient for Aspire. The following JSON represents the latest version of the _.devcontainer/devcontainer.json_ file from the template: - -:::code language="json" source="~/aspire-devcontainer/.devcontainer/devcontainer.json"::: - -## Speed up Codespace creation - -Creating a GitHub Codespace can take some time as it prepares the underlying container image. To expedite this process, you can utilize _prebuilds_ to significantly reduce the creation time to approximately 30-60 seconds (exact timing might vary). For more information on GitHub Codespaces prebuilds, see [GitHub Codespaces prebuilds](https://docs.github.com/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds). diff --git a/docs/index.yml b/docs/index.yml index 3998beb792..14186de991 100644 --- a/docs/index.yml +++ b/docs/index.yml @@ -29,7 +29,7 @@ highlightedContent: url: https://aspire.dev/dashboard/overview/ - itemType: whats-new title: What's new in Aspire - url: whats-new/index.yml + url: https://aspire.dev/whats-new/aspire-13-1/ conceptualContent: # itemType: architecture | concept | deploy | download | get-started | how-to-guide | training | overview | quickstart | reference | sample | tutorial | video | whats-new diff --git a/docs/troubleshooting/snippets/hosting-startup-not-supported/hosting-startup-not-supported.csproj b/docs/troubleshooting/snippets/hosting-startup-not-supported/hosting-startup-not-supported.csproj index 6ea8b05ad1..6bd9f6c79e 100644 --- a/docs/troubleshooting/snippets/hosting-startup-not-supported/hosting-startup-not-supported.csproj +++ b/docs/troubleshooting/snippets/hosting-startup-not-supported/hosting-startup-not-supported.csproj @@ -10,7 +10,7 @@ - + diff --git a/docs/whats-new/index.yml b/docs/whats-new/index.yml deleted file mode 100644 index e08dc67a1a..0000000000 --- a/docs/whats-new/index.yml +++ /dev/null @@ -1,120 +0,0 @@ -### YamlMime:Landing - -title: Aspire — what's new? -summary: Welcome to what's new in Aspire docs. Use this page to quickly find the latest changes. -metadata: - title: Aspire what's new? - description: Learn about new and updated content in Aspire docs. - ms.date: 11/10/2025 - ms.topic: landing-page -landingContent: -- title: Aspire release documentation - linkLists: - - linkListType: whats-new - links: - - text: What's new in Aspire 13.1 - url: https://aspire.dev/whats-new/aspire-13-1/ - - text: What's new in Aspire 13.0 - url: https://aspire.dev/whats-new/aspire-13/ - - text: Announcing Aspire 8.2 - url: https://devblogs.microsoft.com/dotnet/announcing-dotnet-aspire-8-2/ - - text: What's new in Aspire 8.1 - url: https://devblogs.microsoft.com/dotnet/whats-new-in-aspire-8-1/ - - text: Aspire 8.0 (General Availability) - url: https://devblogs.microsoft.com/dotnet/dotnet-aspire-general-availability/ -- title: Aspire GitHub release notes - linkLists: - - linkListType: whats-new - links: - - text: Aspire 9.4.2 - url: https://github.com/dotnet/aspire/releases/tag/v9.4.2 - - text: Aspire 9.4.1 - url: https://github.com/dotnet/aspire/releases/tag/v9.4.1 - - text: Aspire 9.4 - url: https://github.com/dotnet/aspire/releases/tag/v9.4.0 - - text: Aspire 9.3 - url: https://github.com/dotnet/aspire/releases/tag/v9.3.0 - - text: Aspire 9.2 - url: https://github.com/dotnet/aspire/releases/tag/v9.2.0 - - text: Aspire 9.1 - url: https://github.com/dotnet/aspire/releases/tag/v9.1.0 - - text: Aspire 9.0 - url: https://github.com/dotnet/aspire/releases/tag/v9.0.0 - - text: Aspire 8.2.2 - url: https://github.com/dotnet/aspire/releases/tag/v8.2.2 - - text: Aspire 8.2.1 - url: https://github.com/dotnet/aspire/releases/tag/v8.2.1 - - text: Older releases - url: https://github.com/dotnet/aspire/releases -- title: Latest documentation updates - linkLists: - - linkListType: whats-new - links: - - text: Documentation updates - url: https://aspire.dev/whats-new/aspire-13-1/ -- title: Find language updates - linkLists: - - linkListType: whats-new - links: - - text: What's new in C# - url: /dotnet/csharp/whats-new - - text: What's new in F# - url: /dotnet/fsharp/whats-new - - text: What's new for Visual Basic - url: /dotnet/visual-basic/whats-new -- title: Get involved - contribute - linkLists: - - linkListType: overview - links: - - text: Aspire docs repository - url: https://github.com/dotnet/docs-aspire/blob/main/README.md - - text: Project structure and labels for issues and pull requests - url: /contribute/dotnet/labels-projects - - text: .NET Foundation - url: https://dotnetfoundation.org/ - - linkListType: concept - links: - - text: Microsoft docs contributor guide - url: /contribute - - text: .NET docs contributor guide - url: /contribute/dotnet/dotnet-contribute -- title: .NET developers - linkLists: - - linkListType: download - links: - - text: Download the .NET SDK - url: https://dotnet.microsoft.com/download - - linkListType: sample - links: - - text: Aspire samples browser - url: /samples/browse/?products=dotnet-aspire - - linkListType: get-started - links: - - text: .NET on Q&A - url: /answers/products/dotnet - - text: .NET tech community forums - url: https://techcommunity.microsoft.com/t5/net/ct-p/dotnet - - linkListType: whats-new - links: - - text: Community - url: https://dotnet.microsoft.com/platform/community -- title: Related what's new pages - linkLists: - - linkListType: whats-new - links: - - text: .NET docs updates - url: /dotnet/core/whats-new/ - - text: ASP.NET Core docs updates - url: /aspnet/core/whats-new/ - - text: Xamarin docs updates - url: /xamarin/whats-new/ - - text: .NET release notes - url: https://github.com/dotnet/core/blob/main/release-notes/README.md - - text: ASP.NET Core release notes - url: /aspnet/core/release-notes/aspnetcore-3.1 - - text: C# compiler (Roslyn) release notes - url: https://github.com/dotnet/roslyn/tree/main/docs/ide - - text: Visual Studio release notes - url: /visualstudio/ide/whats-new-visual-studio-docs - - text: Visual Studio Code release notes - url: https://code.visualstudio.com/updates diff --git a/docs/whats-new/media/aspire-update.gif b/docs/whats-new/media/aspire-update.gif deleted file mode 100644 index c81395e497..0000000000 Binary files a/docs/whats-new/media/aspire-update.gif and /dev/null differ diff --git a/docs/whats-new/media/clear-cache-command.png b/docs/whats-new/media/clear-cache-command.png deleted file mode 100644 index 9946fc728b..0000000000 Binary files a/docs/whats-new/media/clear-cache-command.png and /dev/null differ diff --git a/docs/whats-new/media/console-logs-all.png b/docs/whats-new/media/console-logs-all.png deleted file mode 100644 index e60b71debf..0000000000 Binary files a/docs/whats-new/media/console-logs-all.png and /dev/null differ diff --git a/docs/whats-new/media/console-logs-ansi-text-format.png b/docs/whats-new/media/console-logs-ansi-text-format.png deleted file mode 100644 index d15493c636..0000000000 Binary files a/docs/whats-new/media/console-logs-ansi-text-format.png and /dev/null differ diff --git a/docs/whats-new/media/consolelogs-download.png b/docs/whats-new/media/consolelogs-download.png deleted file mode 100644 index a6a36bd1c7..0000000000 Binary files a/docs/whats-new/media/consolelogs-download.png and /dev/null differ diff --git a/docs/whats-new/media/create-aspire8-starterapp.png b/docs/whats-new/media/create-aspire8-starterapp.png deleted file mode 100644 index b360a676db..0000000000 Binary files a/docs/whats-new/media/create-aspire8-starterapp.png and /dev/null differ diff --git a/docs/whats-new/media/create-aspire9-starterapp.png b/docs/whats-new/media/create-aspire9-starterapp.png deleted file mode 100644 index 7b1e55750c..0000000000 Binary files a/docs/whats-new/media/create-aspire9-starterapp.png and /dev/null differ diff --git a/docs/whats-new/media/create-new-project-vs.png b/docs/whats-new/media/create-new-project-vs.png deleted file mode 100644 index 786fa4040d..0000000000 Binary files a/docs/whats-new/media/create-new-project-vs.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-browser-telemetry.png b/docs/whats-new/media/dashboard-browser-telemetry.png deleted file mode 100644 index 4d5e849cb4..0000000000 Binary files a/docs/whats-new/media/dashboard-browser-telemetry.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-cardinality-limit.png b/docs/whats-new/media/dashboard-cardinality-limit.png deleted file mode 100644 index d77ea135bd..0000000000 Binary files a/docs/whats-new/media/dashboard-cardinality-limit.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-connection-strings.png b/docs/whats-new/media/dashboard-connection-strings.png deleted file mode 100644 index 3933725312..0000000000 Binary files a/docs/whats-new/media/dashboard-connection-strings.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-console-logs-utc.png b/docs/whats-new/media/dashboard-console-logs-utc.png deleted file mode 100644 index 34613fd52b..0000000000 Binary files a/docs/whats-new/media/dashboard-console-logs-utc.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-console-logs-wrapping.gif b/docs/whats-new/media/dashboard-console-logs-wrapping.gif deleted file mode 100644 index c91fecd322..0000000000 Binary files a/docs/whats-new/media/dashboard-console-logs-wrapping.gif and /dev/null differ diff --git a/docs/whats-new/media/dashboard-container-warning.png b/docs/whats-new/media/dashboard-container-warning.png deleted file mode 100644 index 5c5ab29ed4..0000000000 Binary files a/docs/whats-new/media/dashboard-container-warning.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-context-menu.png b/docs/whats-new/media/dashboard-context-menu.png deleted file mode 100644 index 859dd183ce..0000000000 Binary files a/docs/whats-new/media/dashboard-context-menu.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-copilot.png b/docs/whats-new/media/dashboard-copilot.png deleted file mode 100644 index 806bcefdd3..0000000000 Binary files a/docs/whats-new/media/dashboard-copilot.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-filter.png b/docs/whats-new/media/dashboard-filter.png deleted file mode 100644 index ca7422162e..0000000000 Binary files a/docs/whats-new/media/dashboard-filter.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-geni-visualizer.gif b/docs/whats-new/media/dashboard-geni-visualizer.gif deleted file mode 100644 index 3568676f26..0000000000 Binary files a/docs/whats-new/media/dashboard-geni-visualizer.gif and /dev/null differ diff --git a/docs/whats-new/media/dashboard-hidden-resources.png b/docs/whats-new/media/dashboard-hidden-resources.png deleted file mode 100644 index 686dbdc26b..0000000000 Binary files a/docs/whats-new/media/dashboard-hidden-resources.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-interaction-service.gif b/docs/whats-new/media/dashboard-interaction-service.gif deleted file mode 100644 index 3de5e18620..0000000000 Binary files a/docs/whats-new/media/dashboard-interaction-service.gif and /dev/null differ diff --git a/docs/whats-new/media/dashboard-language.png b/docs/whats-new/media/dashboard-language.png deleted file mode 100644 index 35691ca73c..0000000000 Binary files a/docs/whats-new/media/dashboard-language.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-metrics-warning.png b/docs/whats-new/media/dashboard-metrics-warning.png deleted file mode 100644 index 0d815a4594..0000000000 Binary files a/docs/whats-new/media/dashboard-metrics-warning.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-parameters.png b/docs/whats-new/media/dashboard-parameters.png deleted file mode 100644 index 56bc742e38..0000000000 Binary files a/docs/whats-new/media/dashboard-parameters.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-parentchild.png b/docs/whats-new/media/dashboard-parentchild.png deleted file mode 100644 index 24e448bf10..0000000000 Binary files a/docs/whats-new/media/dashboard-parentchild.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-pause-telemetry.png b/docs/whats-new/media/dashboard-pause-telemetry.png deleted file mode 100644 index 91f1c49989..0000000000 Binary files a/docs/whats-new/media/dashboard-pause-telemetry.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-remove-telemetry.png b/docs/whats-new/media/dashboard-remove-telemetry.png deleted file mode 100644 index 06a3a005c0..0000000000 Binary files a/docs/whats-new/media/dashboard-remove-telemetry.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-resource-icons.png b/docs/whats-new/media/dashboard-resource-icons.png deleted file mode 100644 index 824fa7c414..0000000000 Binary files a/docs/whats-new/media/dashboard-resource-icons.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-resourcedetails.png b/docs/whats-new/media/dashboard-resourcedetails.png deleted file mode 100644 index c4d13187b0..0000000000 Binary files a/docs/whats-new/media/dashboard-resourcedetails.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-rich-property-grid.png b/docs/whats-new/media/dashboard-rich-property-grid.png deleted file mode 100644 index f4349195b8..0000000000 Binary files a/docs/whats-new/media/dashboard-rich-property-grid.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-trace-detail-logs.png b/docs/whats-new/media/dashboard-trace-detail-logs.png deleted file mode 100644 index ac7aa3094b..0000000000 Binary files a/docs/whats-new/media/dashboard-trace-detail-logs.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-trace-type.png b/docs/whats-new/media/dashboard-trace-type.png deleted file mode 100644 index fecb37d0f8..0000000000 Binary files a/docs/whats-new/media/dashboard-trace-type.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-traces-uninstrumented-resources.png b/docs/whats-new/media/dashboard-traces-uninstrumented-resources.png deleted file mode 100644 index 75eef27491..0000000000 Binary files a/docs/whats-new/media/dashboard-traces-uninstrumented-resources.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-tracing-peers.png b/docs/whats-new/media/dashboard-tracing-peers.png deleted file mode 100644 index 275db6b6dc..0000000000 Binary files a/docs/whats-new/media/dashboard-tracing-peers.png and /dev/null differ diff --git a/docs/whats-new/media/dashboard-update-notification.png b/docs/whats-new/media/dashboard-update-notification.png deleted file mode 100644 index bf5e7d7f6a..0000000000 Binary files a/docs/whats-new/media/dashboard-update-notification.png and /dev/null differ diff --git a/docs/whats-new/media/functions-dashboard-screenshot.png b/docs/whats-new/media/functions-dashboard-screenshot.png deleted file mode 100644 index ff9dbe0c4a..0000000000 Binary files a/docs/whats-new/media/functions-dashboard-screenshot.png and /dev/null differ diff --git a/docs/whats-new/media/functions-debug-screenshot.png b/docs/whats-new/media/functions-debug-screenshot.png deleted file mode 100644 index c4ad3c124a..0000000000 Binary files a/docs/whats-new/media/functions-debug-screenshot.png and /dev/null differ diff --git a/docs/whats-new/media/functions-step-1.gif b/docs/whats-new/media/functions-step-1.gif deleted file mode 100644 index 718d11788b..0000000000 Binary files a/docs/whats-new/media/functions-step-1.gif and /dev/null differ diff --git a/docs/whats-new/media/health-check-details.png b/docs/whats-new/media/health-check-details.png deleted file mode 100644 index 57e503f335..0000000000 Binary files a/docs/whats-new/media/health-check-details.png and /dev/null differ diff --git a/docs/whats-new/media/persistent-container-docker-desktop.png b/docs/whats-new/media/persistent-container-docker-desktop.png deleted file mode 100644 index dfe9b8dc18..0000000000 Binary files a/docs/whats-new/media/persistent-container-docker-desktop.png and /dev/null differ diff --git a/docs/whats-new/media/persistent-container.png b/docs/whats-new/media/persistent-container.png deleted file mode 100644 index 5142c03bdc..0000000000 Binary files a/docs/whats-new/media/persistent-container.png and /dev/null differ diff --git a/docs/whats-new/media/redis-insight.png b/docs/whats-new/media/redis-insight.png deleted file mode 100644 index b6117fd766..0000000000 Binary files a/docs/whats-new/media/redis-insight.png and /dev/null differ diff --git a/docs/whats-new/media/upgrade-assistant-1.png b/docs/whats-new/media/upgrade-assistant-1.png deleted file mode 100644 index 69adc9559a..0000000000 Binary files a/docs/whats-new/media/upgrade-assistant-1.png and /dev/null differ diff --git a/docs/whats-new/media/upgrade-assistant-2.png b/docs/whats-new/media/upgrade-assistant-2.png deleted file mode 100644 index d692825859..0000000000 Binary files a/docs/whats-new/media/upgrade-assistant-2.png and /dev/null differ diff --git a/docs/whats-new/media/upgrade-assistant-confirmation.png b/docs/whats-new/media/upgrade-assistant-confirmation.png deleted file mode 100644 index 79a0e12f97..0000000000 Binary files a/docs/whats-new/media/upgrade-assistant-confirmation.png and /dev/null differ diff --git a/docs/whats-new/media/waiting-for-unhealthy-resource.png b/docs/whats-new/media/waiting-for-unhealthy-resource.png deleted file mode 100644 index 680515ba8f..0000000000 Binary files a/docs/whats-new/media/waiting-for-unhealthy-resource.png and /dev/null differ diff --git a/docs/whats-new/toc.yml b/docs/whats-new/toc.yml deleted file mode 100644 index 3d29027fe0..0000000000 --- a/docs/whats-new/toc.yml +++ /dev/null @@ -1,47 +0,0 @@ -items: -- name: Aspire - href: ../index.yml -- name: What's new - href: index.yml -- name: Latest product updates - expanded: true - items: - - name: What's new in Aspire 13.1 - href: https://aspire.dev/whats-new/aspire-13-1/ - - name: What's new in Aspire 13.0 - href: https://aspire.dev/whats-new/aspire-13/ - - name: Announcing Aspire 8.2 - href: https://devblogs.microsoft.com/dotnet/announcing-dotnet-aspire-8-2/ - - name: What's new in Aspire 8.1 - href: https://devblogs.microsoft.com/dotnet/whats-new-in-aspire-8-1/ - - name: Aspire 8.0 (General Availability) - href: https://devblogs.microsoft.com/dotnet/dotnet-aspire-general-availability/ -- name: Breaking changes - href: ../compatibility/breaking-changes.md -- name: GitHub releases - items: - - name: Aspire 9.4.2 - href: https://github.com/dotnet/aspire/releases/tag/v9.4.2 - - name: Aspire 9.4.1 - href: https://github.com/dotnet/aspire/releases/tag/v9.4.1 - - name: Aspire 9.4 - href: https://github.com/dotnet/aspire/releases/tag/v9.4.0 - - name: Aspire 9.3 - href: https://github.com/dotnet/aspire/releases/tag/v9.3.0 - - name: Aspire 9.2 - href: https://github.com/dotnet/aspire/releases/tag/v9.2.0 - - name: Aspire 9.1 - href: https://github.com/dotnet/aspire/releases/tag/v9.1.0 - - name: Aspire 9.0 - href: https://github.com/dotnet/aspire/releases/tag/v9.0.0 - - name: Aspire 8.2.1 - href: https://github.com/dotnet/aspire/releases/tag/v8.2.1 - - name: Aspire 8.2.0 - href: https://github.com/dotnet/aspire/releases/tag/v8.2.0 - - name: Older releases - href: https://github.com/dotnet/aspire/releases -- name: Latest documentation updates - expanded: true - items: - - name: Documentation updates - href: https://aspire.dev/whats-new/aspire-13-1/