二十、附录 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>
:根据给定语言的模板创建项目;支持的语言有C、F和Visual Basic(VB),如果未指定,则默认为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 软件包或其他项目的引用。命令为add
或remove
,一些常见参数如下:
<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>
:安装工具;明显与uninstall
或update
不兼容uninstall <tool>
:卸载工具;不能与install
或update
一起使用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 Build(MSBuild).csproj
语法支持指定不需要监视的扩展名或文件的排除。该命令为watch
,您将传递给dotnet
的任何其他命令都可以在它之后传递,例如,以下命令:
dotnet watch test
默认情况下,watch
跟踪所有文件扩展名;如果您希望排除并仅包括某些,您可以使用全局模式在.csproj
文件中指定它们,如下所示:
<ItemGroup>
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
这将监视所有的.js
文件,除了node_modules
、obj
或bin
下的任何文件,以及以.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>
:放置生成的上下文的路径
版权属于:月萌API www.moonapi.com,转载请注明出处