.NET Aspire 13.2: la modalità isolata risolve i conflitti di porta nello sviluppo parallelo
#tech
spcnet.it/net-aspire-13-2-la-m…
@informatica
.NET Aspire 13.2: la modalità isolata risolve i conflitti di porta nello sviluppo parallelo
Chiunque abbia lavorato con .NET Aspire su progetti reali si è prima o poi scontrato con il classico errore: “Port 17370 is already in use”. Capita quando si prova ad avviare una seconda istanza dell’AppHost — magari su un altro branch, o in un altro terminale — e le porte predefinite sono già occupate dalla prima istanza in esecuzione. Con Aspire 13.2, questo problema ha finalmente una soluzione elegante: la modalità isolata (--isolated).In questo articolo vediamo nel dettaglio come funziona questa nuova funzionalità, i casi d’uso pratici, e le altre novità rilevanti di questa release.
Il problema: conflitti di porta nello sviluppo parallelo
In un tipico progetto .NET Aspire, l’AppHost configura i binding delle porte per tutti i servizi nell’orchestrazione: la dashboard su una porta, l’API su un’altra, il database su un’altra ancora. Questi binding sono statici per default, e questo crea problemi immediati quando si vuole eseguire due istanze dello stesso AppHost contemporaneamente:
- Sviluppo su due branch in parallelo con git worktrees
- Test di integrazione che richiedono un AppHost “live” mentre si continua a sviluppare
- Agenti AI che creano automaticamente worktree separati per task paralleli
- Pipeline CI/CD locali che eseguono più istanze dello stesso progetto
La soluzione tradizionale era modificare manualmente i port binding nella configurazione — un approccio fragile, soggetto a errori e difficile da gestire in team.
La soluzione: la flag
--isolated
Aspire 13.2 introduce la flag--isolatedche risolve il problema alla radice. L’utilizzo è semplicissimo:aspire run --isolated # oppure aspire start --isolated
Quando si passa--isolated, la CLI genera un identificativo univoco per l’istanza corrente, e questo ID guida due comportamenti fondamentali:1. Randomizzazione automatica delle porte
Invece di usare le porte definite staticamente nell’AppHost, ogni istanza isolata riceve un range di porte casuali disponibili. Dove un run normale potrebbe bindare i servizi su 8080, 8081, 8082, due istanze isolate potrebbero usare rispettivamente:
- Istanza 1: 15234, 15235, 15236
- Istanza 2: 22891, 22892, 22893
La cosa notevole è che il codice dell’applicazione non necessita alcuna modifica: il service discovery di Aspire risolve gli endpoint dinamicamente a runtime, quindi i servizi si “trovano” a prescindere dalle porte assegnate.
2. Isolamento dei user secrets
La configurazione rimane completamente separata per ogni istanza. Connection string, chiavi API e altre variabili d’ambiente non si “contaminano” tra run diversi, anche quando puntano a risorse Azure o database con nomi diversi. Questo è particolarmente importante in scenari di test dove ogni istanza deve operare in modo completamente autonomo.Casi d’uso pratici
Git worktrees multipli
Il caso d’uso più comune: sviluppo su due branch in parallelo.# Terminale 1 - branch principale cd ~/projects/myapp-main aspire run --isolated # Terminale 2 - feature branch cd ~/projects/myapp-feature-xyz aspire run --isolated
Entrambe le istanze partono senza conflitti, con porte diverse assegnate automaticamente. La dashboard di Aspire di ciascuna istanza è accessibile su porte diverse, e i servizi di ciascuna istanza sono completamente separati.Test di integrazione con AppHost live
Un pattern molto utile: eseguire test di integrazione contro un AppHost “live” mentre si continua a sviluppare sull’AppHost principale.# AppHost per sviluppo interattivo aspire run --isolated # In un altro terminale: avvia i test che usano il loro AppHost dedicato dotnet test --isolated-apphost
Con la modalità isolata, i test non interferiscono con l’ambiente di sviluppo e viceversa.Sviluppo agentico
Questo è il caso d’uso che ha spinto direttamente lo sviluppo di questa feature. Gli agenti AI in VS Code Copilot possono creare automaticamente git worktree separati per task paralleli. Con--isolated, ogni agente può avviare il proprio AppHost nella sua directory di lavoro senza conflitti con la sessione principale dello sviluppatore.Aspire 13.2 include anche il comando
aspire agent init(rinominato daaspire mcp init) che configura automaticamente gli agenti per usare--isolatedcon i worktree git.Nuovi comandi CLI in Aspire 13.2
La modalità isolata non è l’unica novità della CLI. Aspire 13.2 introduce una serie di nuovi comandi operativi che rendono la gestione delle istanze molto più potente:
aspire ps— lista delle istanze attive
Elenca tutti gli AppHost Aspire in esecuzione sulla macchina, con le relative informazioni (porte, stato, ID istanza). Utile specialmente quando si hanno più istanze isolate attive contemporaneamente e si vuole sapere cosa sta girando.aspire ps # Output: # ID PROJECT STATUS DASHBOARD # abc123 myapp-main Running http://localhost:15234 # def456 myapp-feature Running http://localhost:22891
aspire describe— dettagli sulle risorse
Accede ai dettagli di una risorsa specifica direttamente dal terminale, senza dover aprire la dashboard:aspire describe api # Mostra endpoint, variabili d'ambiente, stato health, ecc.
aspire doctor— diagnostica dell’ambiente
Esegue un controllo completo dell’ambiente di sviluppo: verifica che tutte le dipendenze siano installate correttamente (Docker, .NET SDK, ecc.) e segnala eventuali problemi di configurazione.
aspire wait— attesa su uno stato specifico
Blocca l’esecuzione in script di automazione finché una risorsa non raggiunge uno stato specifico. Utile in pipeline CI/CD o in script di startup:aspire run --isolated & aspire wait --resource api --state Running # Ora l'API è sicuramente up, posso eseguire i test
aspire export— export di telemetria e dati
Cattura telemetria e dati delle risorse in formato JSON per analisi offline o per integrazione con altri strumenti.TypeScript AppHost in preview
Una delle novità più interessanti di Aspire 13.2 è il supporto preview per scrivere l’AppHost in TypeScript. Fino ad ora, l’AppHost era necessariamente un progetto C#. Con questa release, è possibile usare TypeScript con una sintassi idiomatica:import { createBuilder } from '@aspire/hosting'; const builder = await createBuilder(); // Aggiunge Redis come risorsa const cache = await builder.addRedis("cache"); // Aggiunge un servizio Node.js con dipendenza da Redis const api = await builder.addNpmApp("api", "../api") .withReference(cache); await builder.build().run();
Il TypeScript AppHost funziona come un processo guest che comunica tramite JSON-RPC con l’orchestrator .NET sottostante. La CLI gestisce automaticamente la generazione degli SDK TypeScript quando si esegueaspire add, easpire restoreli rigenera se necessario.Questa funzionalità è ancora in preview e non è raccomandata per produzione, ma è un segnale chiaro della direzione che sta prendendo Aspire: abbracciare anche gli sviluppatori TypeScript/Node.js, non solo quelli .NET.
Miglioramenti alla dashboard
Export e import di telemetria
La dashboard introduce un dialog centralizzato “Manage logs and telemetry” che permette di:
- Esportare risorse e telemetria come JSON
- Esportare variabili d’ambiente come file
.env- Importare dati da sessioni precedenti
API HTTP per telemetria
Nuovo endpoint/api/telemetrysulla dashboard che permette query programmatiche dei dati di telemetria con supporto streaming NDJSON. Utile per integrare la telemetria di Aspire con strumenti di monitoring esterni o script di analisi.Impostazione parametri dalla UI
È ora possibile impostare i parametri delle risorse direttamente dalla dashboard, con opzione di salvataggio nei user secrets. Questo elimina la necessità di modificare manualmente i file di configurazione per cambiare un parametro durante il debug.Miglioramenti al visualizzatore GenAI
Chi usa Aspire con workload AI troverà utili i miglioramenti al GenAI visualizer: migliore gestione di schemi complessi, payload troncati, testo non-ASCII e navigazione tra definizioni di tool.Altre novità rilevanti
Endpoint MCP per i servizi
È possibile dichiarare server Model Context Protocol (MCP) direttamente nell’AppHost con il nuovo metodoWithMcpServer():var api = builder.AddProject<Projects.MyApi>("api") .WithMcpServer("/mcp");
Aspire gestirà automaticamente la discovery dell’endpoint MCP, rendendolo disponibile agli agenti AI che operano nell’ambiente.Docker Compose publishing stabile
L’integrazione con Docker Compose passa da prerelease a stabile. È ora possibile generare undocker-compose.yamlcompleto direttamente dal modello di app Aspire conaspire publish --format docker-compose.Azure Virtual Network
Nuovo pacchettoAspire.Hosting.Azure.Networkper la gestione di reti virtuali Azure:var vnet = builder.AddAzureVirtualNetwork("vnet"); var subnet = vnet.AddSubnet("web", "10.0.1.0/24"); var natGateway = vnet.AddNatGateway("nat");Breaking changes da tenere a mente
Se stai aggiornando un progetto Aspire esistente a 13.2, ci sono alcune breaking changes da considerare:
- Variabili Service Discovery: usano ora lo schema endpoint invece del nome endpoint
- File di configurazione: preferenza per
aspire.config.jsonunificato (migrazione automatica al primo run)- Comandi risorse:
resource-start→start,resource-stop→stop- Dashboard API: ora opt-in per dashboard standalone
- Pacchetto AIFoundry:
Aspire.Hosting.Azure.AIFoundry→Aspire.Hosting.Foundry- WithSecretBuildArg: rinominato in
WithBuildSecretPer aggiornare, usa:
aspire update --self # aggiorna la CLI aspire update # aggiorna i pacchetti del progettoConclusione
Aspire 13.2 è una release sostanziosa che affronta problemi concreti del workflow di sviluppo. La modalità--isolatedè probabilmente la novità più impattante per il day-to-day: risolve un pain point reale in modo elegante, senza richiedere modifiche al codice dell’applicazione.L’aggiunta del TypeScript AppHost in preview è un segnale importante della direzione di Aspire verso un ecosistema più inclusivo, mentre i nuovi comandi CLI (
ps,describe,doctor,wait) rendono Aspire molto più adatto a workflow di automazione e sviluppo agentico.Chi lavora già con Aspire troverà questo aggiornamento decisamente consigliato. Chi non lo ha ancora provato, potrebbe essere il momento giusto per iniziare — soprattutto se lavora con architetture microservizi in .NET.
Fonti: Running Multiple Instances of an Aspire AppHost Without Port Conflicts · What’s new in Aspire 13.2
Running Multiple Instances of an Aspire AppHost Without Port Conflicts
Aspire 13.2 introduces isolated mode, letting you run multiple instances of the same AppHost in parallel without port conflicts.James Newton-King (Aspire Blog)
reshared this
The Pirate Post, The Privacy Post, Cybersecurity & cyberwarfare e Poliversity - Università ricerca e giornalismo reshared this.



Saupreiss #Präparat500 🗽
in reply to Free Software Foundation Europe • • •It’s up to Software developers to Devise how robust that code base is going to be.
Mr. Hmpf
in reply to Free Software Foundation Europe • • •