BRANCHENMELDUNGEN

Aspire 13.2: Was .NET-Service-Entwickler wissen müssen

Teilen Sie einige Notizen zur Aspire 13.2 Veröffentlichung vom Ingenieurteam hier bei Iron Software. Wir liefern .NET-Bibliotheken (IronPDF, IronOCR, IronXL, IronWord, IronBarcode und den Rest), und fast jeder Kundenanruf endet mit Besprechungen zu verteiltem App-Orchestrations. Deshalb achten wir auf Aspire-Veröffentlichungen. Die 13.2 ist die erste, bei der das CLI das Gefühl vermittelt, dass es das Dashboard tatsächlich für die meisten alltäglichen Arbeiten ersetzen kann, und es gibt ein paar Änderungen, die bei einem Upgrade Probleme bereiten werden.

Dies ist keine Wiedergabe der Veröffentlichungshinweise. Die offizielle Seite mit Neuigkeiten hat die vollständige Liste. Dies ist das, was in einem bestehenden Code eigentlich nützlich ist, plus die Fallstricke, auf die man achten sollte.

TL;DR

  • CLI ist jetzt wirklich skriptfähig: Detach-Modus, aspire ps, aspire stop, isolierter Modus, JSON-Ausgabe
  • TypeScript AppHost ist in der Vorschau, wenn Sie den .csproj für die Orchestrierungsebene ersetzen möchten
  • Konfigurationsdateien zusammengefasst zu aspire.config.json (Legacy-Dateien werden automatisch migriert)
  • Foundry ersetzt Azure AI Foundry. Diese wird Ihren Build brechen
  • WithSecretBuildArg wird umbenannt in WithBuildSecret
  • Erkennungsumgebungsvariablen für den Dienst verwenden jetzt das Schema, nicht den Endpunktnamen (stilles Bruchrisiko)
  • Standardeinstellung des Azure-Zugangsverhaltens hat sich in Kundenintegrationen geändert

Das CLI ist endlich ein CLI

Dies ist die Überschrift. Vor 13.2 blockierte aspire run Ihr Terminal, und das Dashboard war die einzige realistische Oberfläche zum Verwalten eines laufenden AppHost. In Ordnung für Solo-Entwickler, unangenehm für CI, Integrationstests oder jeden agentengesteuerten Workflow.

13.2 behebt dies:

# Run in the background
aspire run --detach

# Or the new shortcut
aspire start

# See what's running
aspire ps

# Stop it
aspire stop
aspire stop --all
# Run in the background
aspire run --detach

# Or the new shortcut
aspire start

# See what's running
aspire ps

# Stop it
aspire stop
aspire stop --all
SHELL

Kombiniert mit --format json (was an stdout geht, während Statusmeldungen an stderr gehen, wichtig wenn Sie irgendwohin pipen), können Sie echte Automatisierung darum herum aufbauen. aspire ps --resources --format json ist ein solides Fundament für Editor-Integrationen und Skripte.

Isolierter Modus ist der heimliche Held

--isolated ist das, worauf wir gewartet haben. Es führt einen Apphost mit zufälligen Ports und isolierten Benutzungsgeheimnissen aus, was Portkonflikte und Konfigurationskollisionen verhindert:

aspire run --isolated
aspire start --isolated
aspire run --isolated
aspire start --isolated
SHELL

Wenn Sie jemals versucht haben, zwei Checkouts desselben Apphosts gleichzeitig auszuführen — beispielsweise Hauptgegen einen Feature-Zweig, parallele Integrationstests oder agentengetriebene Workflows —, haben Sie den Schmerz gefühlt. Zufällige Ports plus getrennte Geheimnisse bedeuten, dass Sie endlich einfach N Kopien hochfahren lassen können, ohne sich darum zu kümmern.

Für Git-Arbeitsverzeichnisse allein ist das Upgrade wert. Für Integrationstestsuiten, die echte Dienste mit nativen Abhängigkeiten (Chrome-Rendering für PDF-Erstellung, Tesseract für OCR, die üblichen Schwergewichte) hochfahren, ist es der Unterschied zwischen instabil und zuverlässig.

aspire doctor und aspire describe

aspire doctor läuft durch Ihre Umgebung: Entwicklerzertifikatsstatus, Container-Laufzeitversion, .NET SDK, WSL2-Konfiguration, Agentenkonfiguration. Es ist die Art von Dingen, die jeder Framework haben sollte und die meisten kümmern sich nicht darum. Ausgabe ist umsetzbar. Wenn etwas falsch ist, sagt es, was zu tun ist.

aspire describe --follow gibt Ihnen eine Streaming-Ansicht des Ressourcenstatus aus dem Terminal. Gleiche Daten angezeigt vom Dashboard, aber pipbare. In ein tmux-Fenster einfügen, und Sie erhalten den größten Teil des Werts des Dashboards in 80 Spalten.

Ressourcenbefehle wurden aufgeräumter

Die alten resource-start / resource-stop / resource-restart Befehle sind zugunsten der saubereren Unterbefehlsform veraltet:

aspire resource api restart
aspire resource api rebuild
aspire resource api restart
aspire resource api rebuild
SHELL

rebuild ist neu. Es stoppt, baut und startet eine einzelne .NET-Projektressource neu, ohne die ganze Apphost-Sitzung abzubrechen. Wenn Sie jemals einen Dienst in einem 12-Ressourcen-Diagramm geändert haben und bei einem Neustart von allem geächzt haben, ist dies die Lösung. Wir haben dies selbst gespürt: wenn Sie an einer PDF-Render-Vorlage oder am OCR-Vorverarbeitung basteln und das ganze Diagramm nur neu starten müssen, um ein Projekt neu zu laden, wird das schnell alt.

Geheimnisse und Zertifikate ohne das CLI zu verlassen

Zwei neue dedizierte Befehlssätze:

aspire certs clean
aspire certs trust

aspire secret set ApiKey super-secret-value
aspire secret list --format json
aspire certs clean
aspire certs trust

aspire secret set ApiKey super-secret-value
aspire secret list --format json
SHELL

aspire secret ist der größere Gewinn. Es mappt zum selben Benutzergeheimnisse-Speicher, der AddParameter(..., secret: true) im Anwendungsmodell unterstützt, aber Sie benötigen die .NET CLI nicht, um sie zu verwalten. In einem mehrsprachigen Apphost, in dem nicht jeder Entwickler die .NET SDK hat, ist dies von Bedeutung.

aspire wartet auf CI

aspire wait api --status healthy --timeout 120
aspire wait api --status healthy --timeout 120
SHELL

Auf einen Ressourcenstatus blockieren. Kombiniert mit aspire start und --format json, können Sie endlich CI-Skripte schreiben, die darauf warten, dass Dinge tatsächlich bereit sind, anstatt sleep 30 && hope.

Konfiguration: eine Datei, um sie alle zu beherrschen

Aspire konsolidiert seine Konfigurationsdateien. Die alte Aufteilung zwischen .aspire/settings.json und apphost.run.json ist verschwunden, ersetzt durch eine einzelne aspire.config.json im Projektstamm:

{
  "appHost": {
    "path": "apphost.ts",
    "language": "typescript/nodejs"
  },
  "sdk": { "version": "13.2.0" },
  "channel": "stable",
  "profiles": {
    "default": {
      "applicationUrl": "https://localhost:17000;http://localhost:15000"
    }
  }
}

Die Migration ist automatisch. Das erste Mal, wenn Sie einen Aspire-Befehl in einem bestehenden Projekt ausführen, werden die alten Dateien in das neue Format zusammengeführt und die Pfade auf den Projektstamm verknüpft. Legacy-Dateien werden beibehalten, sodass Sie weiterhin ältere CLI-Versionen nebeneinander verwenden können. Globale Einstellungen (globalsettings.json) werden ebenfalls migriert.

Wenn Sie Automatisierung haben, die direkt bei .aspire/settings.json oder apphost.run.json anklopft, planen Sie, sie zu verschieben.

TypeScript AppHost (Vorschau)

Dies ist interessant, selbst wenn Sie es an einem einzigen Tag nicht verwenden werden. Sie können nun Ihren Apphost in TypeScript anstelle von C# schreiben:

import { createBuilder } from './.modules/aspire.js';

const builder = await createBuilder();

const cache = await builder.addRedis("cache");

const api = await builder.addProject("api", "../api")
    .withReference(cache)
    .waitFor(cache);

await builder.build().run();

Im Hintergrund läuft der TS-Apphost als Gastprozess, der mit dem .NET-Orchestrationshost von Aspire über JSON-RPC auf einem lokalen Transport spricht. Gleiches Ressourcenmodell, gleiches Dashboard, gleiche Integrationen, nur in TypeScript ausgedrückt.

Der interessante Teil ist die Codegenerierung. Wenn Sie aspire add ausführen, inspiziert die CLI die .NET-Assembly der Integration und generiert ein TypeScript SDK in .modules/. aspire restore regeneriert sie, nützlich nach einem Upgrade oder Branch-Wechsel (läuft auch automatisch bei aspire run). Der 13.2-Generator hat auch Go-, Java- und Rust-Testziele hinzugefügt, was darauf hinweist, wohin dies führt.

Für .NET-erste Teams wie unseres ist dies mehr "beobachten Sie dies" als "versenden Sie dies", aber das Codegenerierungsmuster bedeutet, dass zukünftige Apps, die mit mehreren Sprachen arbeiten, alle demselben Modell folgen. Siehe die mehrsprachige Architektur-Dokumentation für Informationen darüber, wie die Host-Bridge funktioniert.

Dashboard: Telemetrie-Export/Import ist das neue Spielzeug

Das Dashboard erhielt einen echten Export-/Import-Workflow. Von Einstellungen → Verwalten wählen Sie Ressourcen- und Telemetrietypen aus und exportieren sie als JSON in einem ZIP. Später wieder ins Dashboard importieren oder zur Analyse an jemand anderen (oder ein LLM) übergeben.

Der aspire export CLI-Befehl erzeugt das gleiche Paket:

aspire export --output .\artifacts\aspire-export.zip
aspire export <resource>
aspire export --output .\artifacts\aspire-export.zip
aspire export <resource>
SHELL

Tatsächlich nützlich für Fehlerberichte. Statt 'hier sind einige Screenshots und eine Logdatei', können Sie einen Schnappschuss des tatsächlichen Telemetriestandortes anhängen.

Andere Notizen auf der Dashboard-Seite:

  • Sie können jetzt Ressourceneinstellungen direkt über die Dashboard-Benutzeroberfläche festlegen, mit der Möglichkeit, sie in Benutzergeheimnissen beizubehalten
  • Umgebungsvariablen können als .env Dateien aus der Ressourcendetailansicht exportiert werden
  • Das Ressourcen-Graph-Layout verwendet eine adaptive, kraftgesteuerte Positionierung. Komplexe Graphen sind merklich weniger überfüllt
  • Telemetrie HTTP API unter /api/telemetry gibt OTLP JSON zurück; unterstützt ?follow=true für NDJSON-Streaming. Endpunkte umfassen Ressourcen, Spans, Logs und Traces (einschließlich /traces/{traceId} für vollständige Trace-Abfrage)

Das eigenständige Dashboard setzt nun die Telemetrie-API standardmäßig auf aus. Wenn Sie das Dashboard selbst hosten und von der API abhängig sind, benötigen Sie DASHBOARD__API__ENABLED=true plus Authentifizierungs-Konfiguration (DASHBOARD__API__AUTHMODE und DASHBOARD__API__PRIMARYAPIKEY). AppHost-integrierte Szenarien funktionieren weiterhin, weil Aspire.Hosting die API automatisch für Tools verbindet.

Anmerkungen zum App-Modell

WithMcpServer

Sie können im App-Modell erklären, dass eine Ressource einen MCP-Endpunkt hostet:

var api = builder.AddProject<Projects.MyApi>("api")
    .WithMcpServer("/mcp");
var api = builder.AddProject<Projects.MyApi>("api")
    .WithMcpServer("/mcp");
Dim api = builder.AddProject(Of Projects.MyApi)("api") _
    .WithMcpServer("/mcp")
$vbLabelText   $csharpLabel

Aspire-Tooling kann diesen Endpunkt dann entdecken und proxyen. Wenn Sie etwas versenden, das Tools für Koding-Agenten freigibt, ist dies der sauberste Weg, es zu integrieren. Benutzerdefinierter Pfad oder Endpunktname wird über Optionen unterstützt.

Kontextabhängige Endpunktauflösung

Das ist die Art von Dingen, die man erst bemerkt, wenn man sie braucht. Endpunkte können jetzt aus der Perspektive eines bestimmten Anrufers oder Netzwerks aufgelöst werden:

var endpoint = redis.GetEndpoint("tcp");

var url = await endpoint.GetValueAsync(new ValueProviderContext {
    Caller = containerApp.Resource,
});
var endpoint = redis.GetEndpoint("tcp");

var url = await endpoint.GetValueAsync(new ValueProviderContext {
    Caller = containerApp.Resource,
});
Dim endpoint = redis.GetEndpoint("tcp")

Dim url = Await endpoint.GetValueAsync(New ValueProviderContext With {
    .Caller = containerApp.Resource
})
$vbLabelText   $csharpLabel

Der gleiche Redis-Endpunkt wird je nach Kontext von einem Host-Prozess zu localhost:6379, von einem Container im Host-Netzwerk zu host.docker.internal:6379 oder von einem Container im Aspire-Containernetzwerk zu cache:6379 aufgelöst. Die KnownNetworkIdentifiers Klasse gibt Ihnen LocalhostNetwork, DefaultAspireContainerNetwork und PublicInternet, wenn Sie lieber ein Netzwerk als einen Anrufer auswählen möchten.

Die Release-Notizen weisen ausdrücklich darauf hin, dass diese APIs existierten in 13.1, sich aber nicht korrekt verhielten. Wenn Sie also etwas auf Basis von ihnen in 13.1 geschrieben haben, testen Sie es erneut. Vollständige Details in der Ressourcenhierarchie-Dokumentation.

Container-Build-Geheimnisse

WithSecretBuildArg wird umbenannt in WithBuildSecret. Der neue Name ist klarer. Diese laufen durch Docker/Podman als ordnungsgemäße Build-Geheimnisse, nicht als Build-Args (die in das Image-Verlauf durchdringen).

builder.AddContainer("worker", "contoso/worker")
    .WithDockerfile("../worker")
    .WithBuildSecret("ACCESS_TOKEN", accessToken);
builder.AddContainer("worker", "contoso/worker")
    .WithDockerfile("../worker")
    .WithBuildSecret("ACCESS_TOKEN", accessToken);
$vbLabelText   $csharpLabel

Build-Geheimnisse können jetzt auch Dateien sein (z. B. .npmrc für private Registry-Authentifizierung in Container-Builds), was die meisten realen Anwendungsfälle abdeckt.

Integrationen: die, die wichtig sind

Die vollständige Liste ist lang. Dies sind die, die ich hervorheben würde:

  • Docker Compose Publishing ist jetzt stabil (war Vorversion). AddDockerComposeEnvironment erzeugt einen docker-compose.yaml aus Ihrem Anwendungsmodell zur Veröffentlichungszeit. Nützlicher Notausgang, wenn "Bereitstellen auf Azure" nicht die Antwort ist. Es ist erwähnenswert, wenn Sie Container mit nativen Abhängigkeiten versenden, da IronPDF, IronOCR und IronXL alle Linux-Container und Docker sauber unterstützen, sodass die generierte Compose-Datei normalerweise ohne manuelle Änderung funktioniert.
  • Azure Virtual Network Integration (Aspire.Hosting.Azure.Network) ermöglicht es Ihnen, VNets, Subnetze, NSGs, NAT-Gateways und private Endpunkte im AppHost zu deklarieren. AddPrivateEndpoint erstellt automatisch private DNS-Zonen, virtuelle Netzwerkverbindungen und deaktiviert öffentlichen Zugriff auf das Ziel. Das ist die Art von Dingen, die bisher das Warten auf eine separate Bicep-Datei bedeuteten.
  • Azure Data Lake Storage erhielt sowohl Hosting- als auch Client-Unterstützung: AddDataLake, AddDataLakeFileSystem, sowie AddAzureDataLakeServiceClient / AddAzureDataLakeFileSystemClient auf der Client-Seite. DI-Registrierung, Wiederholungsversuche, Gesundheitsprüfungen, Telemetrie, die übliche Aspire-Stapel.
  • MongoDB EF Core hat eine neue Client-Integration (Aspire.MongoDB.EntityFrameworkCore). AddMongoDbContext<TContext> für den typischen Fall, oder EnrichMongoDbContext<TContext>(), wenn Sie den DbContext selbst registrieren.
  • Azure AI Inference unterstützt jetzt Einbettungen, nicht nur Chat. Registrieren Sie AddAzureEmbeddingsClient("embeddings").AddEmbeddingGenerator() und injizieren Sie IEmbeddingGenerator<string, Embedding<float>>. Auch eine Variante mit Schlüssel ist verfügbar.
  • Azure Container Registry erhielt WithPurgeTask("0 1 * * *", ago: TimeSpan.FromDays(7), keep: 5), das eine ACR-Bereinigungsaufgabe nach einem Cron-Zeitplan bereitstellt.
  • Bun-Unterstützung for JavaScript-Ressourcen über WithBun(). Yarn-Zuverlässigkeit mit AddViteApp wurde auch durch WithYarn() behoben.
  • Microsoft Foundry ersetzt Azure AI Foundry. Aspire.Hosting.Foundry ersetzt Aspire.Hosting.Azure.AIFoundry. Breaking Change; Details unten.

Alles zusammenführen: ein Dokumentenservice in Aspire 13.2

Hier ist das Muster, das wir intern für das Testen verteilter Szenarien mit unseren Bibliotheken verwenden. Es ist es wert zu zeigen, weil die meisten neuen 13.2-Features sich bei dieser Art von Multidienst-Einrichtung auszahlen, nicht in Spielzeugdemos.

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddRedis("cache");

// A worker service that uses IronPDF for HTML to PDF rendering
var renderer = builder.AddProject<Projects.PdfRenderer>("renderer")
    .WithReference(cache)
    .WaitFor(cache)
    .WithMcpServer("/mcp");

// An OCR worker that uses IronOCR for image and PDF text extraction
var ocr = builder.AddProject<Projects.OcrWorker>("ocr-worker")
    .WithReference(cache);

// API gateway that fans out to both
builder.AddProject<Projects.Api>("api")
    .WithReference(renderer)
    .WithReference(ocr)
    .WaitFor(renderer)
    .WaitFor(ocr);

builder.Build().Run();
var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddRedis("cache");

// A worker service that uses IronPDF for HTML to PDF rendering
var renderer = builder.AddProject<Projects.PdfRenderer>("renderer")
    .WithReference(cache)
    .WaitFor(cache)
    .WithMcpServer("/mcp");

// An OCR worker that uses IronOCR for image and PDF text extraction
var ocr = builder.AddProject<Projects.OcrWorker>("ocr-worker")
    .WithReference(cache);

// API gateway that fans out to both
builder.AddProject<Projects.Api>("api")
    .WithReference(renderer)
    .WithReference(ocr)
    .WaitFor(renderer)
    .WaitFor(ocr);

builder.Build().Run();
Imports DistributedApplication

Dim builder = DistributedApplication.CreateBuilder(args)

Dim cache = builder.AddRedis("cache")

' A worker service that uses IronPDF for HTML to PDF rendering
Dim renderer = builder.AddProject(Of Projects.PdfRenderer)("renderer") _
    .WithReference(cache) _
    .WaitFor(cache) _
    .WithMcpServer("/mcp")

' An OCR worker that uses IronOCR for image and PDF text extraction
Dim ocr = builder.AddProject(Of Projects.OcrWorker)("ocr-worker") _
    .WithReference(cache)

' API gateway that fans out to both
builder.AddProject(Of Projects.Api)("api") _
    .WithReference(renderer) _
    .WithReference(ocr) _
    .WaitFor(renderer) _
    .WaitFor(ocr)

builder.Build().Run()
$vbLabelText   $csharpLabel

Was Sie speziell von 13.2 erhalten:

  • aspire start --isolated ermöglicht es Ihnen, zwei Kopien dieses Graphen nebeneinander ohne Portkollisionen auszuführen. Nützlich beim Vergleichen von Branches oder beim parallelen Führen von Integrationstests gegen den Renderer
  • aspire resource renderer rebuild lädt nur den PDF-Renderer neu, wenn Sie eine Razor-Vorlage ändern, anstatt den gesamten Graphen neu zu laden
  • aspire wait renderer --status healthy --timeout 120 lässt Ihr CI blockieren, bis die Chrome-Render-Umgebung initialisiert ist, bevor Sie PDF-Erzeugungstests durchführen
  • Die Telemetrie HTTP API und aspire export geben OTLP-formatierte Spans für jeden Renderaufruf, womit Sie tatsächlich eine langsame CSS-Regel im Produktionstraffic erkennen könnten
  • WithMcpServer ermöglicht es Ihnen, den Renderer als ein MCP-Tool für Coding-Agent-Workflows auszustellen, nützlich, wenn Sie etwas bauen, das programmatisch Dokumente erzeugt

Wenn Sie einen Service wie den oben genannten Renderer bauen möchten, begleitet Sie IronPDFs HTML-zu-PDF-Tutorial durch den C#-Teil. Für den OCR-Arbeiter behandelt der IronOCR Einstiegsguide die Grundlagen.

Breaking Changes, die tatsächlich ein Problem sein könnten

In grober Reihenfolge, wie wahrscheinlich sie Ihnen begegnen:

Service Discovery Env Var Naming

# Before (13.0/13.1)
services__myservice__myendpoint__0 = https://localhost:5001

# After (13.2)
services__myservice__https__0 = https://localhost:5001
# Before (13.0/13.1)
services__myservice__myendpoint__0 = https://localhost:5001

# After (13.2)
services__myservice__https__0 = https://localhost:5001
SHELL

Das Endpunkt-Schema wird anstatt des Endpunkt-Namens verwendet. Wenn Sie irgendwelchen Code oder Konfiguration haben, der auf diese Env Var-Namen matched, aktualisieren Sie diese. Das ist der wahrscheinlichste stille Bruch: nichts wirft eine Ausnahme, die Variablen haben einfach andere Schlüssel.

BeforeResourceStartedEvent

Früher breiter ausgelöst; löst jetzt nur beim tatsächlichen Start einer Ressource aus, nicht bei jedem Zustandswechsel. Wenn Ihr Handler auf das bisherige Verhalten zählte, wird er still aufhören zu laufen.

AIFoundry zu Foundry

Paket- und API-Umbenennung. Aktualisieren Sie die Paketreferenz und die Aufrufe:

<PackageReference Include="Aspire.Hosting.Foundry" Version="13.2.0" />
<PackageReference Include="Aspire.Hosting.Foundry" Version="13.2.0" />
XML
// Before
var ai = builder.AddAzureAIFoundry("ai");

// After
var foundry = builder.AddFoundry("ai");
var project = foundry.AddProject("agents");
var chat = project.AddModelDeployment("chat", FoundryModel.OpenAI.Gpt5Mini);
// Before
var ai = builder.AddAzureAIFoundry("ai");

// After
var foundry = builder.AddFoundry("ai");
var project = foundry.AddProject("agents");
var chat = project.AddModelDeployment("chat", FoundryModel.OpenAI.Gpt5Mini);
' Before
Dim ai = builder.AddAzureAIFoundry("ai")

' After
Dim foundry = builder.AddFoundry("ai")
Dim project = foundry.AddProject("agents")
Dim chat = project.AddModelDeployment("chat", FoundryModel.OpenAI.Gpt5Mini)
$vbLabelText   $csharpLabel

RunAsFoundryLocal funktioniert weiterhin für lokale Modellentwicklung, aber Foundry-Projekte werden nicht unterstützt, wenn die übergeordnete Ressource als Foundry Local konfiguriert ist.

Standard Azure-Anmeldeinformationen

Aspire Azure Client-Integrationen verwenden nicht länger den parameterlosen DefaultAzureCredential-Konstruktor. Wenn Sie sich auf andere Anmeldeinformationen als ManagedIdentityCredential in einem Azure-Dienst verlassen haben, ändern sich das Verhalten. Lesen Sie die Standard Azure Anmeldeinformationen Dokumentation vor dem Upgrade der Produktion.

Ressourcenbefehl umbenennen

resource-start / resource-stop / resource-restart sind jetzt aspire resource <name> start|stop|restart'. Aktualisieren Sie alle Skripte. Die--apphost-Option wird jetzt auch gegenüber der Legacy---project` bevorzugt (die weiterhin akzeptiert wird).

Verbindungseigenschafts-Suffix

Ein Verbindungseigenschafts-Suffix wurde hinzugefügt. Wenn Sie direkt auf Verbindungseigenschaften zugreifen (anstatt über WithReference), prüfen Sie, ob Ihr Code sie weiterhin löst.

WithSecretBuildArg zu WithBuildSecret

Oben erwähnt. Einfaches Umbenennen.

IAzureContainerRegistry veraltet

Verwenden Sie stattdessen die ContainerRegistry-Eigenschaft auf Rechenumgebungen.

Dashboard-Telemetrie-API jetzt Opt-in (eigenständig)

Bereits oben behandelt, aber erwähnenswert: eigenständige Dashboard-Bereitstellungen müssen die API jetzt explizit aktivieren.

Sollten Sie upgraden?

Für einen funktionierenden .NET-Shop, der Multi-Service-Apps lokal ausführt, ja, vorausgesetzt, Sie haben das oben erwähnte Breaking Change-Inventar gemacht. Die CLI-Verbesserungen allein machen es wert. Besonders der getrennte Modus und der isolierte Modus beheben tatsächliche Workflow-Probleme.

Für Foundry-Nutzer: die Umbenennung ist eine erzwungene Migration, wenn Sie etwas Neues von dieser Veröffentlichung wollen, also planen Sie dementsprechend.

Für TypeScript-Neugierige: 13.2 ist die erste Veröffentlichung, bei der der TS-AppHost real genug ist, um es zu evaluieren. Noch in der Vorschau, aber einen Freitagnachmittag wert.

Das Upgrade selbst ist ein Einzeiler, wenn Sie bereits auf 13.x sind:

aspire update --self
aspire update
aspire update --self
aspire update
SHELL

Wenn Sie auf 12.x oder früher sind, schlagen Sie zuerst den Upgrade-Leitfaden nach. Es gibt einen 13.0-Schritt, den Sie nicht überspringen können.

Patch-Hinweis: 13.2.1

13.2.1 wurde seit der ursprünglichen Veröffentlichung mit Zuverlässigkeits-Fixes ausgeliefert. Es gibt ein kleines TypeScript-SDK-Umbenennen, das erwähnenswert ist, aber nur von Bedeutung ist, wenn Sie bereits in der TS-AppHost-Vorschau sind:

Vorher Neu
runAsExistingFromParameters(name, resourceGroup) runAsExisting(name, { resourceGroup })
publishAsExistingFromParameters(name, resourceGroup) publishAsExisting(name, { resourceGroup })
withConnectionPropertyValue(name, value) withConnectionProperty(name, value)
withParameterBuildArg(name, parameter) withBuildArg(name, parameter)

withConnectionPropertyValue wird als Kompatibilitätsalias in den generierten SDKs beibehalten, sodass es kein Laufzeitbruch ist.

Verteilen Sie .NET-Anwendungen mit Dokument-Workloads?

Wenn Ihre Dienste PDF-Erzeugung, OCR, Excel-Verarbeitung, Barcodes oder eines der anderen Formate bearbeiten, die wir abdecken, sind unsere Bibliotheken genau für die Art von Multi-Service, containerfreundlichem Setup, das Aspire orchestriert, ausgelegt. Alles unterstützt .NET 10, 9, 8, 7, 6, Framework und Core und läuft in Linux-Containern, auf Azure, AWS und vor Ort.

Einige Orte, um zu beginnen:

  • IronPDF für HTML-zu-PDF, PDF-Bearbeitung, Signierung und Formulare. Das Tutorialzentrum ist der schnellste Weg zu einem funktionierenden Renderdienst
  • IronOCR für Bild- und PDF-Texterkennung in über 125 Sprachen
  • IronXL für Excel-Lesen/Schreiben ohne Office-Interop
  • IronWord für DOCX-Erstellung und -Bearbeitung
  • IronBarcode und IronQR für Barcode- und QR-Erstellung und Scannen
  • Iron Suite, wenn Sie mehr als eines der oben genannten benötigen

Sie können sich einen 30-tägigen Testschlüssel holen und innerhalb einer Stunde einen funktionierenden PDF- oder OCR-Service in einem Aspire-AppHost betreiben. Wenn Sie auf etwas Seltsames stoßen, ist unser Support-Team tatsächlich Ingenieure, keine Ticket-Triage-Warteschlange.

Das war's. Bis zur nächsten Veröffentlichung.