二十、附录 A:.NET 工具

网络工具

dotnet工具是.NET Core 开发的瑞士军刀。它可以用于很多事情,从运行和创建新项目,到构建它们,添加 NuGet 引用,运行您命名的单元测试。安装了.NET Core软件开发工具包SDK)。在这里,我们将看到它提供的一些最有用的命令。

默认情况下,dotnet始终使用它能找到的最新.NET Core 版本运行。您可以通过--info参数列出所有已安装的版本,如下所示:

dotnet --info

建筑

此工具可用于构建项目或整个解决方案。用于构建的命令为build,最典型的参数如下:

  • <solution | project>:构建特定的项目或解决方案;如果未指定,它将尝试在当前文件夹中查找一个
  • -c <configuration>:配置值之一,如调试、发布等
  • -r <runtime>:支持的运行时配置之一,如果您希望针对特定的运行时配置;有关可能值的列表,请参见第 19 章应用部署

  • -f <framework>:支持的框架之一;有关可能值的列表,请参见第 19 章应用部署

  • -o <folder>:目的地输出目录;如果未指定,则默认为当前文件夹

此外,clean命令会清除所有以前的构建,并且除了解决方案或项目之外,它采用相同的参数。

从模板创建项目

从模板创建项目有时很有用,即使不使用 VisualStudio。此命令为new,典型参数如下:

  • -l:列出可用的模板
  • <template> -name <name>:根据给定名称的模板创建项目;如果未指定名称,则默认为当前文件夹名称
  • <template> -lang <lang>:根据给定语言的模板创建项目;支持的语言有CFVisual BasicVB),如果未指定,则默认为C
  • -o <folder>:目的地输出目录;如果未指定,则默认为当前文件夹
  • --update-apply:更新本地模板

单元测试

dotnet可以使用test命令列出并运行单元测试项目。最常见的参数如下:

  • -t:列出测试
  • --filter <expression>:仅执行与给定表达式匹配的测试;参见https://aka.ms/vstest-filtering 获取支持的语法
  • -d <logfile>:允许记录到文件
  • -r <folder>:放置结果的文件夹
  • --blame:生成一个描述运行顺序的文件(Sequence.xml),以隔离导致测试主机崩溃的问题
  • <solution | project>:构建特定的项目或解决方案;如果未指定,它将尝试在当前文件夹中查找一个

  • -c <configuration>:配置值之一,如调试、发布等

  • -r <runtime>:支持的运行时配置之一,如果您希望针对特定的运行时配置;有关可能值的列表,请参见第 19 章应用部署
  • -f <framework>:支持的框架之一;有关可能值的列表,请参见第 19 章应用部署
  • -o <folder>:目的地输出目录;如果未指定,则默认为当前文件夹

管理包引用

dotnet工具可用于在项目文件中添加或删除对 NuGet 软件包或其他项目的引用。命令为addremove,一些常见参数如下:

  • <project> package <nugetref>:添加或删除对项目的 NuGet 引用;不能与reference组合
  • <project> reference <projectref>:添加或删除对项目的项目引用;项目参考必须是绝对的或相对于要添加的项目的;不能与package组合

该工具可以运行项目,可以选择先恢复依赖项并构建它。默认情况下,它使用默认设置(概要文件、框架和运行时)构建项目并恢复所有依赖项。命令为run,典型参数(可组合)如下:

  • -p <project>:项目运行的路径;如果未提供,它将尝试在当前文件夹中查找单个项目或解决方案
  • --launch-profile <profile>:从launchSettings.json运行配置文件
  • --interactive:允许交互,如请求验证或用户输入
  • --no-restore:在生成之前不还原依赖项(NuGet 软件包)

  • --no-dependencies:不恢复依赖的项目依赖关系,只恢复目标项目

  • --force:强制解决依赖关系,即使上次还原失败
  • --no-build:未在项目运行前进行项目建设;假设已经生成了一个版本
  • -v <verbosity>:设置输出的日志详细级别(安静最小正常详细诊断
  • -c <configuration>:配置值之一,如调试、发布等
  • -r <runtime>:支持的运行时配置之一,如果您希望针对特定的运行时配置;有关可能值的列表,请参见第 19 章应用部署
  • -f <framework>:支持的框架之一;有关可能值的列表,请参见第 19 章应用部署

出版

发布时,命令为publish,典型参数如下:

  • --manifest <manifest>:包含要从publish命令中排除的包列表的清单文件的路径
  • --self-contained:将应用发布为独立的,即不需要在目标机器上安装.NET Core 运行时;不能与--no-self-contained组合
  • --no-self-contained:将发布应用,使其不需要在目标机器上安装.NET Core 运行时;不能与--self-contained组合;这是默认设置
  • --interactive:允许交互,如请求验证或用户输入
  • --no-restore:在生成之前不还原依赖项(NuGet 软件包)
  • --no-dependencies:不恢复依赖的项目依赖关系,只恢复目标项目
  • --force:强制解决依赖关系,即使上次还原失败
  • --no-build:未在项目运行前进行项目建设;假设已经生成了一个版本

  • -v <verbosity>:设置输出的日志详细级别(安静最小正常详细诊断

  • -o <folder>:目的地输出目录;如果未指定,则默认为当前文件夹
  • -c <configuration>:配置值之一,如调试、发布等
  • -r <runtime>:支持的运行时配置之一,如果您希望针对特定的运行时配置;有关可能值的列表,请参见第 19 章应用部署
  • -f <framework>:支持的框架之一;有关可能值的列表,请参见第 19 章应用部署

努吉

有几个命令可用于生成和发布 NuGet 包。首先,我们可以将项目打包为 NuGet 包。这是通过pack命令实现的,典型参数如下:

  • <project | solution>:要打包的项目或解决方案
  • --include-symbols:包括带有调试符号的包
  • --include-source:包括.pdb和源文件
  • --no-build:未在项目运行前进行项目建设;假设已经生成了一个版本
  • -v <verbosity>:设置输出的日志详细级别(安静最小正常详细诊断
  • --interactive:允许交互,如请求验证或用户输入
  • --no-restore:在生成之前不还原依赖项(NuGet 软件包)
  • --no-dependencies:不恢复依赖的项目依赖关系,只恢复目标项目
  • --force:强制解决依赖关系,即使上次还原失败
  • -o <folder>:目的地输出目录;如果未指定,则默认为当前文件夹
  • -c <configuration>:配置值之一,如调试、发布等

  • -r <runtime>:支持的运行时配置之一,如果您希望针对特定的运行时配置;有关可能值的列表,请参见第 19 章应用部署

  • -f <framework>:支持的框架之一;有关可能值的列表,请参见第 19 章应用部署

拥有 NuGet 文件(.nupkg后,可以将其发布到 NuGet 存储库或删除现有版本。这是通过nuget命令实现的,以下是最常见的参数:

  • push <package> -s <url> -k <apikey>:使用 NuGet应用编程接口API键)将特定版本的包推送到源服务器
  • --skip-duplicate:忽略服务器上是否已经存在包和版本
  • delete <package> -s <url> -k <apikey>:从 NuGet 存储库中删除具有特定版本的包
  • locals -l:列出本地 NuGet 缓存位置
  • locals -c <all | http-cache | global-packages | temp>:清除其中一个指定的 NuGet 缓存;all清除所有这些内容

全球工具

.NET Core 具有全局工具,可以用作dotnet工具的扩展;例如,用户机密和实体框架EF核心是通过dotnet本身访问和安装的全局工具。命令为tool,最常见的参数如下:

  • install <tool>:安装工具;明显与uninstallupdate不兼容
  • uninstall <tool>:卸载工具;不能与installupdate一起使用
  • update <tool>:将工具更新至最新版本;无法与install一起使用或卸载
  • -g:全局安装/卸载/更新工具;如果未指定,它将在本地文件夹上运行
  • --version <version>:安装特定版本;仅适用于install
  • list:列出已安装的工具

  • restore:恢复清单文件中指定的工具;不能与-g一起使用

  • --tool-manifest <manifest>:清单文件的路径
  • --configfile <file>:指定 NuGet 配置文件的路径
  • --add-source <location>:增加一个额外的包源;<location>可以是 NuGet 存储库统一资源定位器URL)或本地文件夹

工具可以全局安装在添加到路径的默认操作系统特定位置,也可以本地安装在bin文件夹中。工具是从 NuGet 存储库安装的。

用户机密

dotnet也可用于管理用户机密。命令为user-secrets,最常用的参数如下:

  • -p <project>:项目运行的路径;如果未提供,它将尝试在当前文件夹中查找单个项目或解决方案
  • -c <configuration>:配置值之一,如调试、发布等
  • clear:清除用户机密
  • init:初始化用户机密数据库
  • list:列出当前键
  • remove <key>:删除密钥
  • set <key> <value>:设置键值
  • --id <id>:要使用的用户密码 ID;通常在.csproj文件中指定

文件监视程序

dotnet工具通过watch扩展名,可以用来运行命令,同时监视文件夹下的文件。它有助于检测文件的更改并立即对其作出反应。任何命令都可以通过watch运行,Microsoft BuildMSBuild.csproj语法支持指定不需要监视的扩展名或文件的排除。该命令为watch,您将传递给dotnet的任何其他命令都可以在它之后传递,例如,以下命令:

dotnet watch test

默认情况下,watch跟踪所有文件扩展名;如果您希望排除并仅包括某些,您可以使用全局模式在.csproj文件中指定它们,如下所示:

<ItemGroup>
    <Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>

这将监视所有的.js文件,除了node_modulesobjbin下的任何文件,以及以.js.map结尾的任何文件。还可以逐个文件指定项目文件中不应监视的文件。事情是这样的:

<ItemGroup>
    <Compile Include="File.cs" Watch="false" /> 
    <EmbeddedResource Include="Resource.resx" Watch="false" />
    <ProjectReference Include="..\ClassLibrary\ClassLibrary.csproj" Watch="false" /> 
</ItemGroup>

在本例中,我们可以看到,我们关闭了对单个文件、嵌入式资源和整个项目引用的监视。

EF 核心

让 EF Core 与数据库交互的方法也是通过dotnet——具体来说就是ef工具。以下是一些有用的命令:

  • database drop:删除目标数据库
  • database drop -f:在没有确认的情况下强制执行下降操作
  • database drop --dry-run:显示要删除的内容,但实际上并没有这样做
  • database update <0 | migration>:将目标数据库更新为特定迁移;如果未指定(或0),则默认为最新版本
  • -c <context>:上下文类型名称或完全限定类型名称;如果未指定,则它必须是目标项目上的唯一上下文
  • -p <project>:用于上下文的项目
  • -s <startupproject>:要使用的启动项目
  • --no-build:未在项目运行前进行项目建设;假设已经生成了一个版本
  • --configuration <configuration>:配置值之一,如调试、发布等

  • -r <runtime>:支持的运行时配置之一,如果您希望针对特定的运行时配置;有关可能值的列表,请参见第 19 章应用部署

  • -f <framework>:支持的框架之一;有关可能值的列表,请参见第 19 章应用部署
  • migrations add <migration>:使用给定名称创建新迁移
  • migrations add <migration> -o <folder>:目的地输出目录;如果未指定,则默认为迁移
  • migrations list:列出现有迁移
  • migrations remove:删除最新的迁移
  • migrations script <0 | from> <to>:生成一个结构化查询语言SQL)脚本,将源迁移(如果未指定,默认为初始迁移)更改为目标迁移(如果未指定,则为最后一个)
  • dbcontext list:列出目标项目的可用上下文
  • dbcontext info:显示特定上下文的信息;需要-c参数
  • dbcontext scaffold <connection> <provider>:为特定连接字符串和提供程序生成普通旧公共语言运行时(CLR)对象POCO类)
  • --schema <schema>:要为其生成 POCO 类的架构名称;可提供多个;如果没有,则包括所有模式
  • --table <table>:生成 POCO 类的表名;可提供多个;如果没有,则选择所有表
  • --use-database-names:不要使用类似 C 的名称,而是使用数据库中的名称
  • -d:使用属性配置scaffold生成的模型
  • --context-dir <path>:放置生成的上下文的路径