技术速递|dotnet scaffold – .NET 的下一代内容创建

作者:Sayed Ibrahim Hashimi - 首席项目经理

排版:Alan Wang

Visual Studio 中为 ASP.NET Core 项目搭建脚手架是一项长期特性,是在 ASP.NET Core 发布后不久添加的。多年来,我们一直支持从命令行搭建脚手架。根据从命令行操作中获得的用户反馈,我们了解到用户需要一种交互式的命令行界面(CLI)体验来进行脚手架操作。为了实现这一目标,我们一直在开发一种新的交互式 CLI 工具 dotnet scaffold。此 CLI 工具现已发布预览版。在本文中,我们将介绍如何获取和使用这个新的命令行工具。此工具是开源的,您可以在 scaffold 存储库中查看代码。该存储库包含 dotnet scaffold 工具的代码以及其他与脚手架相关的代码。

安装 dotnet scaffold

若要安装此工具,我们将使用 dotnet tool 命令。执行以下命令以安装最新发布的版本。

dotnet tool install --global Microsoft.dotnet-scaffold

若要安装特定版本,请访问 nuget.org 上的软件包。有关如何管理 dotnet 工具的更多信息,请参阅 .NET 工具 – .NET CLI | Microsoft Learn 上的文档。在上面的命令中,我们全局安装该工具,但是您也可以在本地文件夹中安装工具。.NET 工具文档包含有关这两种方法的更多信息 .NET 工具 – .NET CLI | Microsoft Learn。

使用 dotnet scaffold

默认情况下,dotnet scaffold 是一个交互式工具,这意味着您调用它时,它会根据需要,提示您输入信息。为了实现自动化,您可以传入所有参数值,我们将在以后的文章中讨论这个问题。在运行 dotnet scaffold 之前,请确保将目录 (cd) 更改为 .NET Core 项目所在的文件夹。dotnet scaffold 支持以下 ASP.NET Core 项目类型:

  • Web app

  • Web API

  • .NET Aspire

  • Blazor

在这篇文章中,我们将重点介绍 Web 应用程序选项,向您介绍 dotnet scaffold,但所有 scaffolders 都遵循相同的模式和提示。

我使用 dotnet new 命令 dotnet new webapp -o MyWebApp 创建了一个新的 ASP.NET Core 9 Web 应用程序。然后我使用 cd 切换到该目录。运行 dotnet scaffold 时,系统会提示您选择脚手架类别。请参阅下面的屏幕截图。
在这里插入图片描述
在上图中,dotnet scaffold 显示了当前支持的脚手架类别列表。若要浏览此菜单,您可以使用键盘上的上和下箭头键来选择所需的类别。将来,随着我们添加更多脚手架,可能这个菜单中会出现更多类别。在这里,您可以选择想要生成到项目中的类别。例如,让我们探索 Razor Pages 选项。若要选择一个类别,请导航到该类别并输入 Return。这将带您进入选定的选项。如果您选择了错误的选项,您可以随时使用导航下的“Return”返回上一个选择。输入 Razor Pages 选项后,您将看到以下选项。
在这里插入图片描述
​现在,dotnet scaffold 提示应调用特定的脚手架。在这种情况下,我们看到两个选项,第一个选项是创建一个新的空 Razor 页面。第二个选项将基于项目的模型类生成 Razor 页面。使用 Entity Framework 将值保存到所选的数据库提供程序中。让我们首先运行空脚手架,然后运行 CRUD 脚手架。空脚手架将生成一个带有关联代码文件的新 Razor 页面。这相当于运行 dotnet new page。生成的文件将没有任何自定义内容。

当您选择“Razor Page – Empty”选项时,按下回车键进入该选项。之后,系统将提示您选择目标项目。
在这里插入图片描述
在本例中,我们只有一个选项,因此我们将选择 MyWebApp 并按下回车键。然后它将提示我们输入要创建的 Razor 页面的名称。将其命名为 About 并按下回车键。您将看到命令正在运行,然后您应该会看到下面的结果。
在这里插入图片描述
完成此操作后,您应该会在当前工作目录中看到文件 About.cshtml 和 About.cshtml.cs。在运行此脚手架时,它将使用当前目录作为输出位置。现在让我们继续看看 Razor Page EF 选项的工作原理。

在调用 EF 脚手架之前,您需要一个模型类来为其搭建内容。我使用与之前相同的命令 dotnet new webapp -o MyWebApp 创建了一个新的 Web 应用程序,并在项目的根目录中添加了以下类。

namespace MyWebApp;
public class Contact
{public int Id { get; set; }public string? Firstname { get; set; }public string? Lastname { get; set; }public string? Email { get; set; }
}

这是一个非常基本的模型类,可以与 Entity Framework 一起使用。现在我们准备调用 dotnet scaffold。启动后,选择 Razor Pages 类别,然后选择 Razor Pages with Entity Framework (CRUD) 选项。它会提示您选择项目,由于本例中只有一个项目,您可以按下 Enter 键,因为它已被选中。接下来,dotnet scaffold 将提示您选择模型类,如下所示。
在这里插入图片描述
选择联系人并按下回车键继续。接下来的屏幕将提示您输入数据库上下文的名称。在本例中,将其命名为 ContactDbContext 并按下回车键。根据惯例,建议此值以 DbContext 结尾,但这不是必需的。参见下图。
在这里插入图片描述
按下回车键后,系统将提示您选择数据库提供程序。
在这里插入图片描述
以下列表总结了该屏幕上的选项。

  • npgsql-efcore = PostgreSQL

  • sqlserver-efcore = SQL Server

  • sqlite-efcore = SQLite

  • cosmos-efcore = Cosmos DB

为了简单起见,我们将选择 sqlite-efcore 选项。SQLite 是一个基于文件的数据库,没有任何外部依赖项。选择该选项并按下回车键。系统将提示您选择应执行哪些操作。参见下图。
在这里插入图片描述
您可以选择要创建的单个项目,也可以选择 CRUD 选项来构建整个项目的页面。选择 CRUD 选项。接下来,系统会提示您是否要包含预发布包。由于我们正在使用 .NET 9 预览版,因此选择 Yes,然后按下回车键。之后,构建操作将开始。您将看到一个微调器显示它正在运行,并且它会发出正在进行的操作的消息。完成后,您应该会看到类似于以下屏幕截图的结果。
在这里插入图片描述
执行此操作后,将对项目应用以下更改。

  • 项目文件为 Entity Framework 添加了包引用

  • Program.cs 已更新,用于初始化数据库连接

  • appsettings.json 已更新连接信息

  • ContactDbContext.cs 已创建并添加到项目根目录

  • 用于 CRUD 操作的 Razor Pages 已添加到 Pages 文件夹中

内容已生成,但数据库尚未初始化。为了准备数据库,我们需要迁移,然后更新数据库。使用以下命令执行此操作。

  • dotnet ef migrations add initialMigration

    • 这将添加一个名为 initialMigration 的新迁移。您可以在此处为其指定任何您喜欢的名称。
  • dotnet ef database update

    • 这将把迁移应用于数据库

在运行这些命令后,您就可以使用 dotnet run 命令运行应用程序了。应用程序启动后,URL 将显示在终端中,在浏览器中打开该 URL,并在 URL 末尾添加 /ContactPages。您应该会看到类似以下内容。
在这里插入图片描述
使用此页面,您可以创建新联系人并管理现有联系人。添加一些联系人后,它们将显示在此页面上,如下所示。
在这里插入图片描述
现在您有一个可以管理联系人列表的 ASP.NET Core Razor Pages Web 应用。搭建完成后,您可能希望自定义生成的内容以满足您的需求。在开发应用时,您可以使用 dotnet scaffold 生成其他内容。

回顾

在这篇文章中,我们使用 dotnet scaffold 将 Razor Pages 添加到新的 ASP.NET Core .NET 9 Web 应用程序中。请关注此博客以获取有关 dotnet scaffold 更改的更多信息。我们希望您能试用这个新的命令行工具并向我们提供一些反馈,以便我们能够改进它。我们尤其希望收到有关此命令行工具交互性的反馈。以下部分包含有关如何提供反馈的信息。

反馈

您可以通过在 Scaffolding 存储库中提交问题来与我们分享反馈。您还可以通过开发者社区发送反馈:通过报告问题报告任何错误或问题,并分享您对新功能或现有功能改进的建议。请在下面的评论中告诉我们您的想法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/488308.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ZYNQ 7z010开发板 oled点亮的实现

dc拉高的时候就是发送128字节数据的时候 发送指令dc拉低 模式是00 sck先置低再置高 复位是与开发板上的按键一样都是低有效 25位字节指令 加 3字节的 页地址加起始结束 b0,00,10, timescale 1ns / 1ps module top0(input wire clk ,input wire rst_n,// out…

使用torch模拟 BMM int8量化计算。

使用torch模型BMM int8计算。 模拟:BMM->softmax->BMM 计算流程 import torch import numpy as np torch.manual_seed(777) def int8_quantize_per_token(x: torch.Tensor, axis: int -1, attnsFalse):if x.dtype ! torch.float32:x x.type(torch.float32)…

【CSS in Depth 2 精译_070】11.3 利用 OKLCH 颜色值来处理 CSS 中的颜色问题(下):从页面其他颜色衍生出新颜色

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 11.1.1 模式的建立11.1.2 还原设计稿 11.2 颜色的定义 11.2.1 色域与色彩空间11.2.2 CSS 颜色表示法 11.2.2.1 RGB…

HTML:表格重点

用表格就用table caption为该表上部信息,用来说明表的作用 thead为表头主要信息,效果加粗 tbody为表格中的主体内容 tr是 table row 表格的行 td是table data th是table heading表格标题 ,一般表格第一行的数据都是table heading

15.Java 网络编程(网络相关概念、InetAddress、NetworkInterface、TCP 网络通信、UDP 网络通信、超时中断)

一、网络相关概念 1、网络通信 网络通信指两台设备之间通过网络实现数据传输,将数据通过网络从一台设备传输到另一台设备 java.net 包下提供了一系列的类和接口用于完成网络通信 2、网络 两台以上设备通过一定物理设备连接构成网络,根据网络的覆盖范…

项目中使用AntV L7地图(五)添加飞线

项目中使用AntV L7地图,添加 飞线 文档地址:https://l7.antv.antgroup.com/zh/examples/line/animate/#trip_animate 一、初始化地图 使用的地图文件为四川地图JSON,下载地址:https://datav.aliyun.com/portal/school/atlas/area_selector#&…

MySQL-DQL之数据表操作

文章目录 零. 准备工作一. 简单查询1.查询所有的商品.2.查询商品名和商品价格.3.查询结果是表达式(运算查询):将所有商品的价格10元进行显示. 二. 条件查询1. 比较查询2. 范围查询3. 逻辑查询4. 模糊查询5. 非空查询 三. 排序查询四. 聚合查询…

nacos bootstrap.yml 和 spring.config.import 加载配置的流程区别

相关依赖 springboot:2.7.15 nacos:2.2.3 bootstrap.yml加载方式 加载流程如下图所示 从图中可以看出,: 1.bootstrap.yml 的加载是在 BootstrapApplicationListener.onApplicationEvent 接收到 ApplicationEnvironmentPreparedEventEvent 事件后另起一个 Sprin…

Kubernetes Nginx-Ingress | 禁用HSTS/禁止重定向到https

目录 前言禁用HSTS禁止重定向到https关闭 HSTS 和设置 ssl-redirect 为 false 的区别 前言 客户请求经过ingress到服务后,默认加上了strict-transport-security,导致客户服务跨域请求失败,具体Response Headers信息如下; 分析 n…

关于idea-Java-servlet-Tomcat-Web开发中出现404NOT FOUND问题的解决

在做web项目时,第一次使用servlet开发链接前端和后端的操作,果不其然,遇到了诸多问题,而遇到最多的就是运行项目打开页面时出现404NOT FOUND的情况。因为这个问题我也是鼓捣了好久,上网查了许多资料才最终解决&#xf…

开发一套SDK 第一弹

自动安装依赖包 添加条件使能 #ex: filetypesh bash_ls 识别 达到预期,多个硬件环境 等待文件文件系统挂在完成 或者创建 /sys/class/ 属性文件灌入配置操作 AI 提供的 netlink 调试方法,也是目前主流调用方法,socket yyds #include <linux/module.h> #include <linux…

深入理解 Apache Shiro:安全框架全解析

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在…

【PlantUML系列】流程图(四)

目录 目录 一、基础用法 1.1 开始和结束 1.2 操作步骤 1.3 条件判断 1.4 并行处理 1.5 循环 1.6 分区 1.7 泳道 一、基础用法 1.1 开始和结束 开始一般使用start关键字&#xff1b;结束一般使用stop/end关键字。基础用法包括&#xff1a; start ... stopstart ...…

Mac 录制电脑系统内的声音的具体方法?

1.第一步&#xff1a;下载BlackHole 软件 方式1&#xff1a;BlackHole官方下载地址 方式2&#xff1a; 百度云下载 提取码: n5dp 2.第二步&#xff1a;安装BlackHole 双击下载好的BlackHole安装包&#xff0c;安装默认提示安装。 3.第三步&#xff1a;在应用程序中找到音频…

Unity简单操作及使用教程

Unity 是一款强大的跨平台游戏引擎&#xff0c;它不仅支持 2D 和 3D 游戏的开发&#xff0c;还可以用于虚拟现实 (VR)、增强现实 (AR)、动画、建筑可视化等多个领域。Unity 提供了完整的开发环境&#xff0c;具有丰富的功能、工具和资源&#xff0c;可以帮助开发者快速实现创意…

一个简单带颜色的Map

越简单 越实用。越少设计&#xff0c;越易懂。 需求背景&#xff1a; 创建方法&#xff0c;声明一个hashset&#xff0c; 元素为 {“#DE3200”, “#FA8C00”, “#027B00”, “#27B600”, “#5EB600”} 。 对应的key为 key1 、key2、key3、key4、key5。 封装该方法&#xff0c…

Go快速开发框架集成Vue3漂亮的动态流程图编辑和动态流程展示插件

温馨提示&#xff1a;我们分享的文章是给需要的人&#xff0c;不需要的人请绕过&#xff0c;文明浏览&#xff0c;误恶语伤人&#xff01; 前言 为大家在开发流程相关业务时有个漂亮流程图展示&#xff0c;我们集成一个实用的流程图编辑器&#xff0c;让流程开发变得简单&…

论文阅读:Statistical Comparisons of Classifiers over Multiple Data Sets

论文地址&#xff1a;Statistical Comparisons of Classifiers over Multiple Data Sets (acm.org) 前面在机器学习之Friedman检验-CSDN博客 中提到了Friedman检验&#xff0c;这里将对这个方法的论文进行详细的阅读&#xff0c;以了解其原理。 摘要 尽管用于在单个数据集上比…

【数字信号处理】期末综合实验,离散时间信号与系统的时域分析,离散信号 Z 变换,IIR 滤波器的设计与信号滤波,用窗函数法设计 FIR 数字滤波器

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…

人工智能导论学习笔记

目录 一、概要 二、人工智能基础知识 智能 人工智能 人工智能三要素 人工智能发展历程 人工智能的三次浪潮 人工智能行业发展现状 人工智能技术水平现状 人工智能技术层级 人工智能应用开发周期 机器学习的流程 一、概要 《人工智能导论(通识版)》张大斌 田恒义 许…