Aspire 13.2: Co programiści usług .NET muszą wiedzieć
Dzielenie się notatkami na temat wydania Aspire 13.2 od zespołu inżynierów w Iron Software. Dostarczamy biblioteki .NET (IronPDF, IronOCR, IronXL, IronWord, IronBarcode i inne), i praktycznie każda rozmowa z klientem kończy się na temat organizacji aplikacji rozproszonych. Dlatego zwracamy uwagę na wydania Aspire. 13.2 to pierwsze, w którym CLI wydaje się, że może rzeczywiście zastąpić dashboard dla większości codziennej pracy, a są pewne zmiany, które ugryzą cię przy aktualizacji.
To nie jest powtórzenie notatek wydawniczych. Oficjalna strona co nowego ma wyczerpującą listę. To są rzeczy, które są naprawdę przydatne w praktykującym kodzie, plus pułapki, na które trzeba zwrócić uwagę.
TL;DR
- CLI jest teraz prawdziwie skryptowalne: tryb odłączony,
aspire ps,aspire stop, tryb izolowany, wynik JSON - TypeScript AppHost jest w wersji zapoznawczej, jeśli chcesz zrezygnować z
.csprojdla warstwy orkiestracji - Pliki konfiguracyjne skonsolidowane do
aspire.config.json(starsze pliki automatycznie migrowane) - Foundry zastępuje Azure AI Foundry. To złamie twoją budowę
WithSecretBuildArgzostał przemianowany naWithBuildSecret- Zmienne środowiskowe odkrywania usług teraz korzystają z schematu, a nie z nazwy punktu końcowego (ciche ryzyko przerwania)
- Domyślne zachowanie poświadczeń Azure zmieniło się w integracjach klientów
Konsola CLI to w końcu konsola CLI
To jest nagłówek. Przed wersją 13.2, aspire run blokował Twój terminal, a pulpit nawigacyjny był jedyną realną powierzchnią do zarządzania działającym apphostem. Dobrze dla samotnego programisty, niezręcznie dla CI, testów integracyjnych lub dowolnych przepływów pracy sterowanych agentem.
13.2 to naprawia:
# 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 --allPołączona z --format json (która idzie na stdout, podczas gdy komunikaty o stanie idą na stderr, co jest ważne, jeśli korzystasz gdziekolwiek z potoków), można zbudować wokół tego prawdziwą automatyzację. aspire ps --resources --format json jest solidnym fundamentem dla integracji edytora i skryptów.
Tryb izolowany to nieśpiewany bohater
--isolated jest tym, na co czekaliśmy. Uruchamia apphost z randomizowanymi portami i odizolowanymi tajnościami użytkownika, zapobiegając konflikty portów i kolizje konfiguracji:
aspire run --isolated
aspire start --isolatedaspire run --isolated
aspire start --isolatedJeśli kiedykolwiek próbowałeś uruchomić dwa checkouty tego samego apphostu jednocześnie — powiedzmy main kontra gałąź funkcji, równoległe testy integracyjne, lub workflowy kierowane przez agenta — poczułeś ból. Losowe porty i odseparowane tajemnice oznaczają, że wreszcie możesz uruchomić N kopii i nie przejmować się.
Tylko dla drzew gitowych to jest warte aktualizacji. Dla zestawów testów integracyjnych, które uruchamiają prawdziwe usługi z natywnymi zależnościami (renderowanie Chrome dla generowania PDF-ów, Tesseract dla OCR, typowe ciężkie wagowe), to różnica między nietreściwym a niezawodnym.
Aspiruj do lekarza i aspiruj do opisu
aspire doctor działa przez Twoje środowisko: stan certyfikatów deweloperskich, wersja środowiska kontenerowego, .NET SDK, konfiguracja WSL2, konfiguracja agenta. To jest ten rodzaj rzeczy, który powinien mieć każdy framework, a większość nie zadaje sobie trudu. Wyjście jest działowe. Gdy coś jest nie tak, mówi ci, co robić.
aspire describe --follow daje Ci strumieniowy widok stanu zasobów z terminala. Te same dane, które pokazuje dashboard, ale z możliwością przekazywania. Wstaw to w panel tmux i dostajesz większość wartości dashboardu w 80 kolumnach.
Polecenia zasobów stały się bardziej przejrzyste
Stare polecenia resource-start / resource-stop / resource-restart są przestarzałe na rzecz czystszego formatu podkomend:
aspire resource api restart
aspire resource api rebuildaspire resource api restart
aspire resource api rebuildrebuild jest nowy. Zatrzymuje, buduje i uruchamia ponownie pojedynczy zasób projektu .NET bez rozładowania całej sesji apphost. Jeśli kiedykolwiek zmieniłeś jedną usługę w grafie 12-zasobowym i jęknąłeś przy ponownym uruchamianiu wszystkiego, to jest naprawa. Czuliśmy to sami: gdy iterujesz nad szablonem renderowania PDF-a lub dostosowujesz przetwarzanie wstępne OCR, restartowanie całego grafu tylko po to, aby przeładować jeden projekt szybko się starzeje.
Tajemnice i certyfikaty bez wychodzenia z CLI
Dwie nowe grupy poleceń:
aspire certs clean
aspire certs trust
aspire secret set ApiKey super-secret-value
aspire secret list --format jsonaspire certs clean
aspire certs trust
aspire secret set ApiKey super-secret-value
aspire secret list --format jsonaspire secret to większy sukces. Odpowiada temu samemu sklepowi z tajemnicami użytkownika, który wspiera AddParameter(..., secret: true) w modelu aplikacji, ale nie potrzebujesz zainstalowanego .NET CLI, aby nimi zarządzać. W poliglotowej apphost, gdzie nie każdy deweloper ma SDK .NET, ma to znaczenie.
Aspiruj czeka na CI
aspire wait api --status healthy --timeout 120aspire wait api --status healthy --timeout 120Blokuj na stanie zasobu. W połączeniu z aspire start i --format json, możesz wreszcie pisać skrypty CI, które czekają, aż rzeczywiście będą gotowe, zamiast sleep 30 && hope.
Konfiguracja: jeden plik, który rządzi wszystkimi
Aspiruj konsoliduje swoje pliki konfiguracyjne. Stary podział między .aspire/settings.json i apphost.run.json zniknął, zastąpiony przez pojedynczy aspire.config.json w katalogu głównym projektu:
{
"appHost": {
"path": "apphost.ts",
"language": "typescript/nodejs"
},
"sdk": { "version": "13.2.0" },
"channel": "stable",
"profiles": {
"default": {
"applicationUrl": "https://localhost:17000;http://localhost:15000"
}
}
}Migracja jest automatyczna. Za pierwszym razem gdy uruchomisz jakiekolwiek polecenie aspire w istniejącym projekcie, starsze pliki zostaną scalone w nowy format z ścieżkami przeniesionymi do katalogu głównego projektu. Zachowane są starsze pliki, więc w dalszym ciągu możesz używać starszych wersji CLI obok siebie. Globalne ustawienia (globalsettings.json) też są migrowane.
Jeśli masz automatyzację, która bezpośrednio wykorzystuje .aspire/settings.json lub apphost.run.json, zaplanuj jej przeniesienie.
TypeScript AppHost (wersja zapoznawcza)
To interesujące, nawet jeśli nie zamierzasz go używać od pierwszego dnia. Teraz możesz napisać swój apphost w TypeScript zamiast C#:
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();Pod maską, TS apphost działa jako proces gość rozmawiający z zarządzającym przez Aspire hostem orkiestrowania .NET przez JSON-RPC na lokalnym transporcie. Ten sam model zasobów, ten sam dashboard, te same integracje, tylko wyrażone w TypeScript.
Interesujący jest element generacji kodu. Kiedy uruchamiasz aspire add, CLI analizuje .NET asamblaż integracji i generuje TypeScript SDK do .modules/. aspire restore regeneruje je, przydatne po aktualizacji lub przełączeniu gałęzi (również uruchamia się automatycznie na aspire run). Generator 13.2 dodał także cele testowe dla Go, Java i Rust, co sugeruje, dokąd to zmierza.
Dla zespołów w pierwszej kolejności .NET, jak nasze, jest to bardziej "obejrzyj to" niż "wprowadź to", ale wzorzec generacji kodu oznacza, że przyszłe poliglotowe języki apphost będą podążać tym samym modelem. Zobacz dokumentacja architektury wielojęzycznej aby dowiedzieć się, jak działa mostek hosta.
Dashboard: eksport/import telemetryczny to nowa zabawka
Dashboard dostał prawdziwy przepływ pracy eksportu/importu. Z Ustawienia → Zarządzaj, wybierz zasoby i typy telemetryczne, a następnie eksportuj je jako JSON w zipie. Później ponownie importuj do panelu sterowania lub przekaż je komuś innemu (lub LLM) do analizy.
Polecenie CLI aspire export dostarcza ten sam pakiet:
aspire export --output .\artifacts\aspire-export.zip
aspire export <resource>aspire export --output .\artifacts\aspire-export.zip
aspire export <resource>Rzeczywiście przydatne do raportów błędów. Zamiast "oto kilka zrzutów ekranu i plik dziennika", możesz dołączyć migawkę aktualnego stanu telemetrii.
Inne notatki dotyczące strony dashboardu:
- Teraz możesz ustawić parametry zasobów bezpośrednio z interfejsu użytkownika dashboardu, z opcją zapisania do tajemnic użytkownika
- Zmienne środowiskowe można eksportować jako pliki
.envz widoku szczegółów zasobów - Układ grafu zasobów używa adaptacyjnego pozycjonowania siłowego. Złożone wykresy są zauważalnie mniej zagracone
- Telemetria HTTP API pod
/api/telemetryzwraca OTLP JSON; wspiera?follow=truedla strumieniowania NDJSON. Punkty końcowe obejmują zasoby, zakresy, logi i ślady (w tym/traces/{traceId}dla pełnego wyszukiwania śladu)
Samodzielny panel sterowania teraz domyślne ustawia API telemetryczne na wyłączone. Jeśli hostujesz pulpit nawigacyjny samodzielnie i zależy Ci na API, potrzebujesz DASHBOARD__API__ENABLED=true oraz skonfigurowania autoryzacji (DASHBOARD__API__AUTHMODE i DASHBOARD__API__PRIMARYAPIKEY). Scenariusze zintegrowane z AppHost nadal działają, ponieważ Aspire.Hosting automatycznie podłącza API do narzędzi.
Części modelu aplikacji warte uwagi
WithMcpServer
Możesz zadeklarować w modelu aplikacji, że zasób hostuje punkt końcowy MCP:
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")Narzędzia Aspire mogą wtedy odkrywać i kierować ten punkt końcowy. Jeśli wydajesz cokolwiek, co eksponuje narzędzia dla agentów kodujących, to jest najczystszy sposób, aby to podłączyć. Obsługiwany niestandardowy ścieżkę lub nazwę punktu końcowego przez opcje.
Kontekstowa rozdzielczość punktu końcowego
Tego rodzaju rzeczy nie zauważasz, dopóki ich nie potrzebujesz. Punkty końcowe mogą być teraz rozwiązywane z perspektywy konkretnego dzwoniącego lub sieci:
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
})Ten sam punkt końcowy Redis zostanie rozwiązany jako localhost:6379 z procesu hosta, host.docker.internal:6379 z kontenera na sieci hosta lub cache:6379 z kontenera na sieci kontenerowej Aspire, w zależności od kontekstu. Klasa KnownNetworkIdentifiers daje Ci LocalhostNetwork, DefaultAspireContainerNetwork i PublicInternet, jeśli wolisz wybierać sieć niż dzwoniącego.
Notatki z wydania wyraźnie wskazują, że te API istniały w wersji 13.1, ale nie działały poprawnie. Więc jeśli napisałeś coś przeciwko nim w wersji 13.1, przetestuj ponownie. Pełne szczegóły w dokumentacji hierarchii zasobów.
Tajemnice budowy kontenera
WithSecretBuildArg przemianowano na WithBuildSecret. Nowa nazwa jest bardziej przejrzysta. Te przepływają przez Docker/Podman jako właściwe tajemnice budowy, a nie jako argumenty budowy (które wyciekają do historii obrazów).
builder.AddContainer("worker", "contoso/worker")
.WithDockerfile("../worker")
.WithBuildSecret("ACCESS_TOKEN", accessToken);builder.AddContainer("worker", "contoso/worker")
.WithDockerfile("../worker")
.WithBuildSecret("ACCESS_TOKEN", accessToken);Tajne informacje o budowie mogą teraz również być plikami (np. .npmrc do uwierzytelniania w prywatnych rejestrach w kompilacjach kontenerów), co obejmuje większość rzeczywistych przypadków użycia.
Integracje: te, które mają znaczenie
Pełna lista jest długa. To są te, które bym zaznaczył:
- Publikowanie Docker Compose jest teraz stabilne (było w wersji wstępnej).
AddDockerComposeEnvironmentgenerujedocker-compose.yamlz Twojego modelu aplikacji w czasie publikacji. Przydatne jako wyjście awaryjne, gdy 'wdrażanie do Azure' nie jest odpowiedzią. Warto zauważyć, jeśli dostarczasz kontenery zawierające natywne zależności, ponieważ IronPDF, IronOCR i IronXL wszystkie wspierają kontenery Linux i Docker czysto, więc wygenerowany plik komponujący zwykle działa bez ręcznej interwencji. - Azure Virtual Network integracja (
Aspire.Hosting.Azure.Network) pozwala Ci deklarować VNets, podsieci, NSGs, bramy NAT i prywatne punkty końcowe w apphost.AddPrivateEndpointautomatycznie tworzy prywatne strefy DNS, łączy sieci wirtualne i wyłącza publiczny dostęp na celu. To jest ten rodzaj rzeczy, który wcześniej oznaczał utrzymywanie osobnego pliku Bicep. - Azure Data Lake Storage zyskał wsparcie zarówno od strony hosta, jak i klienta:
AddDataLake,AddDataLakeFileSystem, plusAddAzureDataLakeServiceClient/AddAzureDataLakeFileSystemClientpo stronie klienta. Rejestracja DI, ponowienia, kontrole stanu zdrowia, telemetria, standardowy stos Aspire. - MongoDB EF Core ma nową integrację klienta (
Aspire.MongoDB.EntityFrameworkCore).AddMongoDbContext<TContext>dla typowego przypadku, lubEnrichMongoDbContext<TContext>(), jeśli sam rejestrujesz DbContext. - Inferencja AI Azure teraz obsługuje wpasowania, a nie tylko czat. Zarejestruj
AddAzureEmbeddingsClient("embeddings").AddEmbeddingGenerator()i wstrzyknijIEmbeddingGenerator<string, Embedding<float>>. Dostępny jest również odmiana z kluczem. - Azure Container Registry zyskał
WithPurgeTask("0 1 * * *", ago: TimeSpan.FromDays(7), keep: 5), które przygotowuje zadanie czyszczenia ACR według harmonogramu crona. - Bun support dla zasobów JavaScript przez
WithBun(). Niezawodność Yarn zAddViteAppzostała również naprawiona dziękiWithYarn(). - Microsoft Foundry zastępuje Azure AI Foundry.
Aspire.Hosting.FoundryzastępujeAspire.Hosting.Azure.AIFoundry. Zmiana łamiąca; szczegóły poniżej.
Składanie całości: usługa dokumentów w Aspire 13.2
Oto wzór, który stosujemy wewnętrznie do testowania rozproszonych scenariuszy z naszymi bibliotekami. Warto to pokazać, ponieważ większość nowych funkcji w wersji 13.2 ma sens w tego rodzaju złożonej konfiguracji wieloserwisowej, a nie w prostych demonstracjach.
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()Co konkretnie otrzymujesz od 13.2:
aspire start --isolatedpozwala uruchomić dwie kopie tego grafu obok siebie bez kolizji portów. Przydatne przy porównywaniu gałęzi lub uruchamianiu równoległych testów integracji przeciwko renderującemuaspire resource renderer rebuildprzeładowuje tylko render PDF, gdy zmieniasz szablon Razor, zamiast odbijać cały grafaspire wait renderer --status healthy --timeout 120pozwala Twojemu CI blokować się do czasu inicjalizacji renderowania Chrome przed rozpoczęciem testów generowania PDF- Telemetria HTTP API i
aspire exportdaje Ci zakresy w formacie OTLP dla każdego wywołania renderowania, co jest sposobem na uchwycenie wolnej reguły CSS w ruchu produkcyjnym WithMcpServerpozwala Ci eksponować renderer jako narzędzie MCP dla przepływów pracy agenta kodowania, przydatne, jeśli budujesz cokolwiek, co programatycznie generuje dokumenty
Jeśli chcesz zbudować usługę taką jak powyższy renderer, samouczek HTML na PDF IronPDF przeprowadza po stronie C#. Dla pracownika OCR, przewodnik po IronOCR obejmuje podstawy.
Zmiany łamiące, które naprawdę cię dotkną
W przybliżonym porządku, jak prawdopodobne są:
Nazewnictwo zmiennych środowiskowych usługi odkrywania
# 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:5001Używany jest schemat punktu końcowego zamiast nazwy punktu końcowego. Jeśli masz jakiś kod lub konfigurację dopasowywaną do tych nazw zmiennych środowiskowych, zaktualizuj je. To jest najbardziej prawdopodobne ciche złamanie: nic nie wyrzuca błędu, zmienne po prostu mają różne klucze.
BeforeResourceStartedEvent
Wcześniej odpalany szerzej; teraz odpalany tylko, gdy faktycznie rozpoczyna zasób, a nie przy każdej zmianie stanu. Jeśli twój handler liczył na wcześniejsze zachowanie, przestanie działać po cichu.
AIFoundry do Foundry
Zmiana nazwy pakietu i API. Zaktualizuj odniesienie do pakietu i wywołania:
<PackageReference Include="Aspire.Hosting.Foundry" Version="13.2.0" /><PackageReference Include="Aspire.Hosting.Foundry" Version="13.2.0" />// 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)RunAsFoundryLocal nadal działa dla lokalnego rozwoju modelu, ale Projekty Foundry nie są wspierane, gdy zasób nadrzędny jest skonfigurowany jako Foundry Local.
Domyślne poświadczenie Azure
Integracje klientów Aspire Azure przestały używać konstruktora DefaultAzureCredential bez parametrów. Jeśli polegałeś na poświadczeniach innych niż ManagedIdentityCredential działających w usłudze Azure, zachowania się zmieniają. Przeczytaj domyślną dokumentację poświadczeń Azure przed aktualizacją wersji produkcyjnej.
Zmiana nazwy polecenia zasobu
resource-start / resource-stop / resource-restart to teraz aspire resource <name> start|stop|restart. Zaktualizuj wszelkie skrypty. Opcja --apphost jest również teraz preferowana zamiast starszego --project (który nadal jest akceptowany).
Sufiks właściwości połączenia
Dodano sufiks właściwości połączenia. Jeśli uzyskujesz właściwości połączenia bezpośrednio (zamiast przez WithReference), sprawdź, czy Twój kod wciąż je rozwiązuje.
WithSecretBuildArg do WithBuildSecret
Wspomniane powyżej. Prosta zmiana nazwy.
IAzureContainerRegistry przestarzałe
Użyj właściwości ContainerRegistry w środowiskach obliczeniowych zamiast tego.
Telemetria Dashboard API teraz opcjonalna (samodzielna)
Już omówione powyżej, ale warto powtórzyć: samodzielne wdrożenia dashboard muszą teraz wyraźnie włączyć API.
Czy powinieneś zaktualizować?
Dla działającego sklepu .NET z uruchamianiem aplikacji wieloserwisowych lokalnie, tak, o ile zinwentaryzowałeś powyższe zmiany łamiące. Same ulepszenia CLI czynią to wartym zachodu. Tryb odłączony i tryb izolowany w szczególności rozwiązują rzeczywiste problemy z przepływem pracy.
Dla użytkowników Foundry: zmiana nazwy to wymuszona migracja, jeśli chcesz cokolwiek nowego z tego wydania, więc planuj odpowiednio.
Dla osób zaciekawionych TypeScript: 13.2 to pierwsze wydanie, w którym TS apphost jest na tyle realny, by ocenić. Wciąż podgląd, ale warto poświęcić piątkowe popołudnie.
Sama aktualizacja jest jednowierszowa, jeśli już jesteś na 13.x:
aspire update --self
aspire updateaspire update --self
aspire updateJeśli jesteś na 12.x lub wcześniejszej, sięgnij po przewodnik aktualizacji najpierw. Jest krok 13.0, którego nie można pominąć.
Notatka o poprawkach: 13.2.1
13.2.1 zostało wysłane od pierwotnego wydania z poprawkami niezawodno Jest mała zmiana nazwy SDK TypeScript warta odnotowania, ma znaczenie tylko, jeśli już jesteś na TS apphost w podglądzie:
| Poprzednie | Nowe |
|---|---|
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 jest utrzymywany jako alias zgodności w generowanych SDK, więc nie jest to przerwa w działaniu.
Budowanie rozproszonych aplikacji .NET z obciążeniami dokumentowymi?
Jeśli twoje usługi wykonują generację PDF, OCR, przetwarzanie Excela, kody kreskowe lub inne formaty, które obejmujemy, nasze biblioteki są zaprojektowane dokładnie dla tego rodzaju ustawień wieloserwisowych przyjaznych kontenerom, które Aspire organizuje. Wszystko obsługuje .NET 10, 9, 8, 7, 6, Framework i Core, i działa w kontenerach Linux, Azure, AWS i lokalnie.
Kilka miejsc, od których można zacząć:
- IronPDF dla HTML do PDF, edycji PDF, podpisywania i formularzy. Centrum samouczków to najszybsza droga do działającej usługi renderującej
- IronOCR do ekstrakcji tekstu z obrazów i PDF w ponad 125 językach
- IronXL do odczytu i zapisu Excela bez Office Interop
- IronWord do generowania i edycji DOCX
- IronBarcode i IronQR do generowania i skanowania kodów kreskowych oraz QR
- Iron Suite jeśli potrzebujesz czegoś więcej niż powyższe
Możesz zdobyć 30-dniowy klucz próbny i mieć działającą usługę PDF lub OCR działającą w aplikacji Aspire w mniej niż godzinę. Jeśli napotkasz coś dziwnego, nasza ekipa wsparcia to prawdziwi inżynierowie, nie kolejka triage do zgłoszeń.
To wszystko. Do zobaczenia przy kolejnym wydaniu.
