【譯】發(fā)布 .NET Aspire 預(yù)覽版 2(一)
原文 | Damian Edwards
翻譯 | 鄭子銘
自上個(gè)月宣布并推出 .NET Aspire 以來,我們收到的反饋非常驚人!通過問題和拉取請求對回購協(xié)議的參與一直激勵(lì)著團(tuán)隊(duì)。我們正在深入了解開發(fā)人員在分布式云應(yīng)用程序開發(fā)中如何使用(以及希望使用).NET Aspire 或其他組件。社區(qū)已經(jīng)做出了一些很棒的貢獻(xiàn),許多貢獻(xiàn)也在進(jìn)行中。我代表團(tuán)隊(duì)感謝您的興奮和反饋!
.NET Aspire 預(yù)覽版 2 現(xiàn)已推出!以下是此預(yù)覽版中新增內(nèi)容的摘要:
- 儀表板
- 所有資源類型現(xiàn)在都合并到一個(gè)“資源”視圖中
- 新的詳細(xì)信息窗格設(shè)計(jì)
- 所有資源類型的控制臺日志現(xiàn)在合并到一個(gè)“控制臺日志”視圖中
- 添加到結(jié)構(gòu)化日志視圖的日志類別名稱
- 對其他資源和開發(fā)服務(wù)的傳出請求顯示為資源/服務(wù)名稱而不是 URL
- 托管和編排
- 容器現(xiàn)在支持配置在啟動時(shí)傳遞給它們的參數(shù)
- 容器和可執(zhí)行文件現(xiàn)在可以通過端點(diǎn)引用其他資源以進(jìn)行服務(wù)發(fā)現(xiàn)配置
- 添加沒有
的項(xiàng)目 - 資源現(xiàn)在可以引用現(xiàn)有的 URI 端點(diǎn)來進(jìn)行服務(wù)發(fā)現(xiàn)配置
- 支持添加 Node.js 應(yīng)用程序作為資源
- 現(xiàn)在,無論有或沒有副本托管,項(xiàng)目都使用啟動配置文件中的端口
- 組件
- 組件包現(xiàn)在有單獨(dú)的圖標(biāo)
- 新:添加了 MySqlConnector 組件
- 新:添加了 MongoDB 組件
- Azure SDK 組件現(xiàn)在默認(rèn)啟用分布式跟蹤(服務(wù)總線除外)
- 部署
- Azure 開發(fā)人員 CLI 改進(jìn)
- Aspir8:社區(qū)開發(fā)的工具,用于將 .NET Aspire 應(yīng)用程序部署到 Kubernetes
- Dapr
- 不再需要指定 Dapr sidecar 的 ID
- 對描述應(yīng)用程序模型中所有 Dapr 組件的一流支持
- Azure 開發(fā)人員 CLI (AZD) 支持將使用 Dapr 的 .NET Aspire 應(yīng)用部署到 Azure 容器應(yīng)用 (ACA)
獲取 .NET Aspire 預(yù)覽版 2
要安裝或升級到 .NET Aspire Preview 2,請執(zhí)行以下步驟:
-
如果在 Windows 上并使用 Visual Studio 與 .NET Aspire 配合使用,請安裝/更新到最新的 Visual Studio 2022 預(yù)覽版(撰寫本文時(shí)為 17.9.0 預(yù)覽版 2.0)
- 確保在 Visual Studio 安裝程序的“單獨(dú)組件”選項(xiàng)卡下選擇“.NET Aspire SDK(預(yù)覽版)”組件:注意,您必須按照這些說明中的其余步驟更新到預(yù)覽版 2

- 如果在 Windows 上安裝了 Visual Studio 2022 17.8.x,但打算僅通過 .NET CLI (dotnet) 使用 .NET Aspire,請使用獨(dú)立安裝程序下載并安裝 .NET 8.0.100 SDK
- 如果在 macOS 或 Linux 上,請下載并安裝 .NET 8.0.100 SDK
- 從終端運(yùn)行以下命令來更新 .NET Aspire 工作負(fù)載:
dotnet workload update
dotnet workload install aspire
請注意,如果您已經(jīng)安裝了 .NET Aspire 工作負(fù)載的 Preview 1 版本,您可能會看到消息,通知您工作負(fù)載已安裝。這些可以安全地忽略。
- 有關(guān)安裝 .NET Aspire 的詳細(xì)說明,請參閱文檔
更新后,您可以運(yùn)行 dotnet Workload List 查看更新后的版本(注意:您的 Visual Sudio 版本可能有所不同):
Installed Workload Id Manifest Version Installation Source
----------------------------------------------------------------------------------------------
aspire 8.0.0-preview.2.23619.3/8.0.100 SDK 8.0.100, VS 17.9.34310.174
更新現(xiàn)有應(yīng)用程序
對于現(xiàn)有 .NET Aspire 應(yīng)用程序,執(zhí)行上述步驟以獲取最新工作負(fù)載后,您將需要更改任何 Aspire 組件的包引用。將所有 Aspire 包引用(托管和組件)更新為 8.0.0-preview.2.23619.3,例如托管將更改為:
<PackageReference Include="Aspire.Hosting" Version="8.0.0-preview.2.23619.3" />
引用的所有其他包也應(yīng)該更新到 Preview 2 版本。如果使用 Visual Studio,您還可以使用 NuGet 包管理器并更新通過 IDE 使用的所有包(請務(wù)必選中 UI 中的預(yù)發(fā)布復(fù)選框)。
API變更
此外,我們在預(yù)覽版 2 中進(jìn)行了一些托管 API 更改。在現(xiàn)有代碼中,API 調(diào)用(例如 builder.AddPostgresContainer(...))現(xiàn)在應(yīng)更改為 builder.AddPostgres(...) 以保留相同的行為(有類似的更改)也適用于其他資源類型)。我們希望在“抽象”資源類型的概念(例如 Redis 服務(wù)器(例如 AddRedis(...)))和運(yùn)行 Redis 的容器(例如 AddRedisContainer(...))之間添加區(qū)別。 RedisContainer 等類型的構(gòu)建器支持 WithEnvironment(...) 和 WithVolumeMount(...) 等擴(kuò)展方法,而 RedisServer 等類型的構(gòu)建器則不支持,因?yàn)轭A(yù)期 .NET Aspire 應(yīng)用程序的部署工具可能會使用目標(biāo)云環(huán)境中的托管資源類型,不支持以這種方式進(jìn)行自定義。
此外,我們還刪除了 builder.AddXYZConnection(...) 方法,其中 XYZ 是資源類型的名稱。這些擴(kuò)展是添加環(huán)境變量(例如 ConnectionString_myresource)的非常薄的包裝。
儀表板更新
我們在 .NET Aspire 的初始預(yù)覽版中得到了對儀表板的熱烈響應(yīng)!人們非常熱衷于能夠輕松地了解 .NET Aspire 如何幫助默認(rèn)情況下使應(yīng)用程序可觀察,以及構(gòu)成分布式系統(tǒng)的所有單獨(dú)資源的狀態(tài)。根據(jù)您的反饋,我們對預(yù)覽 2 中的儀表板進(jìn)行了以下更改。
資源和控制臺日志的新組合視圖
在預(yù)覽版 1 中,儀表板上有單獨(dú)的頁面,用于查看配置為 .NET Aspire 應(yīng)用程序一部分的項(xiàng)目、可執(zhí)行文件和容器的詳細(xì)信息。在預(yù)覽版 2 中,這些已合并為一個(gè)“資源”頁面,使您可以更輕松地在一個(gè)位置查看所有資源的狀態(tài)和關(guān)鍵詳細(xì)信息。 “名稱”列現(xiàn)在包括項(xiàng)目和可執(zhí)行文件的進(jìn)程 ID 以及容器的容器 ID。 “源”列詳細(xì)說明了項(xiàng)目和可執(zhí)行文件的路徑,對于容器,顯示了圖像名稱和標(biāo)簽,以及容器端口(如果公開)。

控制臺日志得到相同的處理,從而可以更輕松地從單個(gè)頁面選擇任何資源來查看控制臺日志:

可停靠的詳細(xì)信息窗格
現(xiàn)在使用新的詳細(xì)信息窗格來顯示相關(guān)項(xiàng)目的更多信息,例如資源的環(huán)境變量,或者結(jié)構(gòu)化日志或跟蹤范圍的詳細(xì)信息。該窗格可以停靠在當(dāng)前視圖的底部或側(cè)面,從而可以更輕松地在當(dāng)前視圖中顯示的不同項(xiàng)目的詳細(xì)信息之間進(jìn)行切換。
添加到結(jié)構(gòu)化日志視圖的日志類別名稱
日志消息的類別名稱現(xiàn)在顯示在結(jié)構(gòu)化日志視圖的詳細(xì)信息窗格中,從而可以輕松查看消息的來源:

發(fā)往已知目的地的傳出請求將顯示名稱而不是 URL
現(xiàn)在,對已知目的地(例如由 Visual Studio 托管的其他資源和端點(diǎn)以支持開發(fā)體驗(yàn)(例如瀏覽器鏈接))的傳出請求現(xiàn)在會在“跟蹤”視圖中自動解析和適當(dāng)命名:

托管和編排更新配置容器啟動參數(shù)
現(xiàn)在,您可以使用 IResourceBuilder
var builder = DistributedApplication.CreateBuilder(args);
var addressBookDb = builder.AddSqlServerContainer("sqlserver")
// Mount the init scripts directory into the container.
.WithVolumeMount("./sqlserverconfig", "/usr/config", VolumeMountType.Bind)
// Mount the SQL scripts directory into the container so that the init scripts run.
.WithVolumeMount("../DatabaseContainers.ApiService/data/sqlserver", "/docker-entrypoint-initdb.d", VolumeMountType.Bind)
// Run the custom entrypoint script on startup.
.WithArgs("/usr/config/entrypoint.sh")
.AddDatabase("AddressBook");
所有資源類型之間的服務(wù)發(fā)現(xiàn)
現(xiàn)在可以使用 WithServiceBinding 方法配置容器和可執(zhí)行文件以公開服務(wù)端點(diǎn),然后使用 WithReference 將它們作為對其他資源的引用傳遞,并將其服務(wù)端點(diǎn)作為服務(wù)發(fā)現(xiàn)的配置注入。
var builder = DistributedApplication.CreateBuilder(args);
// Add customer API container built by partner team
var customerApi = builder.AddContainer("customerapi", image: "contoso.com/eshop/customers")
.WithServiceBinding(containerPort: 8080, scheme: "http");
// Configure our storefront web project to reference the customer service API so that it can
// reference the service by name instead of by IP address, e.g. http://customerapi
var storeFront = builder.AddProject<Projects.Contoso_eShop_Storefront>("storefront")
.WithReference(customerApi);
根據(jù)項(xiàng)目文件路徑添加項(xiàng)目
在某些情況下,將 AppHost 項(xiàng)目中的項(xiàng)目引用添加到服務(wù)項(xiàng)目作為項(xiàng)目引用可能是不合需要的。現(xiàn)在,只需將項(xiàng)目文件路徑傳遞給 AddProject 方法,就可以將項(xiàng)目添加為資源,而無需項(xiàng)目引用。這可以使在更復(fù)雜的源布局情況下(例如,從當(dāng)前解決方案外部集成項(xiàng)目變得更容易)。當(dāng)使用 git 子模塊引入合作伙伴團(tuán)隊(duì)存儲庫的內(nèi)容時(shí)。
var builder = DistributedApplication.CreateBuilder(args);
var pathBasedProject = builder.AddProject(
name: "customerapi",
// The project will be resolved relative to the AppHost project directory
projectPath: "../../submodules/customerapi/src/CustomerApi/CustomerApi.csproj");
引用現(xiàn)有的 URI 端點(diǎn)以進(jìn)行服務(wù)發(fā)現(xiàn)配置
從當(dāng)前解決方案外部引用服務(wù)甚至由不同團(tuán)隊(duì)管理的另一種模式可以是使用專門為開發(fā)目的托管的服務(wù)的現(xiàn)有實(shí)例。您現(xiàn)在可以直接引用基于 HTTP 的服務(wù),并使用服務(wù)發(fā)現(xiàn)所需的值配置使用資源:
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddRedis("cache");
builder.AddProject<Projects.AspireApp30_Web>("webfrontend")
.WithReference(cache)
// The app can reference this service simply via http://apiservice
.WithReference("apiservice", new Uri("http://apiservice.v2.dev.contoso.com"));
支持添加 Node.js 應(yīng)用程序作為資源
現(xiàn)在支持將基于 Node.js 的應(yīng)用程序配置到 .NET Aspire AppHost 項(xiàng)目中。 AddNodeApp 和 AddNpmApp 方法可用于輕松地將 Node.js 應(yīng)用程序包含在 Aspire AppHost 項(xiàng)目中,例如基于 React 的前端。包含的 Node.js 應(yīng)用程序可以參與服務(wù)發(fā)現(xiàn)和連接字符串配置,并將注入儀表板 OTLP 端點(diǎn) URL 以啟用 OpenTelemetry。要將應(yīng)用程序配置為部署為容器,請對返回的資源調(diào)用 AsDockerFileInManifest 方法。
Aspire with Node.js 示例已更新為使用此內(nèi)置支持,并演示了如何配置 Node.js 應(yīng)用程序以將 OpenTelemetry 跟蹤導(dǎo)出到 Aspire 儀表板。
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddRedisContainer("cache");
var apiservice = builder.AddProject<Projects.ApiService>("apiservice");
builder.AddNodeApp("webapp", "../webapp/app.js")
.WithReference(apiservice)
.WithReference(cache)
// Dynamically assign an http port for the the Node.js app.
// The port will be set in the 'PORT' environment variable.
.WithServiceBinding(scheme: "http", env: "PORT")
.AsDockerfileInManifest();
項(xiàng)目現(xiàn)在一致使用其啟動配置文件中指定的端口
啟動 AppHost 項(xiàng)目時(shí),Aspire.Hosting 會在所有配置的服務(wù)之前啟動反向代理,以便可以執(zhí)行對配置的副本進(jìn)行負(fù)載平衡等任務(wù)。項(xiàng)目應(yīng)用程序本身的實(shí)例將被分配隨機(jī)端口來偵聽,代理會將客戶端請求轉(zhuǎn)發(fā)到該端口。現(xiàn)在,在開發(fā)過程中本地運(yùn)行時(shí),代理將使用項(xiàng)目啟動配置文件中指定的端口(即 Properties/launchSettings.json 文件中的“applicationUrl”屬性)作為傳入端口。這意味著您用于訪問項(xiàng)目的本地主機(jī) URL 現(xiàn)在應(yīng)該在開發(fā)過程中保持一致,因?yàn)樗身?xiàng)目的啟動配置文件控制,無論是直接啟動項(xiàng)目,還是通過 AppHost 項(xiàng)目啟動它,無論是否有副本。

原文鏈接
Announcing .NET Aspire Preview 2
本作品采用知識共享署名-非商業(yè)性使用-相同方式共享 4.0 國際許可協(xié)議進(jìn)行許可。
歡迎轉(zhuǎn)載、使用、重新發(fā)布,但務(wù)必保留文章署名 鄭子銘 (包含鏈接: http://www.rzrgm.cn/MingsonZheng/ ),不得用于商業(yè)目的,基于本文修改后的作品務(wù)必以相同的許可發(fā)布。
如有任何疑問,請與我聯(lián)系 (MingsonZheng@outlook.com)


浙公網(wǎng)安備 33010602011771號