美文网首页程序员
.NET Core CLI命令行接口

.NET Core CLI命令行接口

作者: 书上得来终觉浅 | 来源:发表于2018-10-12 14:50 被阅读4次

    .NET Core Command-Line Interface 是开发.NET应用程序的基础开发工具。

    安装.NET Core CLI

    有两种方式安装CLI:

    • 通过下载安装包,适用于开发环境,要用到本机的管理员权限
    • 通过shell脚本,适用于服务器环境

    CLI命令

    dotnet工具(称为驱动程序)作为cli命令的入口,能够接收并执行命令。同时,它可以选择要使用的cli的sdk版本,如果未指定版本,默认使用最新的sdk版本。如果要指定版本使用dotnet --fx-version <version>命令,dotnet只做两件事:

    1. 执行命令,格式如下:dotnet command option,比如:新建一个mvc工程命名为Zebra.Liu.MVC,dotnet new mvc -n Zebra.Liu.MVC
    2. 运行程序,格式如下:dotnet /build/my_app.dll

    dotnet命令大致可以分为以下几类:

    • 常规命令,如 dotnet newdotnet build,dotnet run
    • 工程类命令
      • 项目之间的引用,dotnet add reference,dotnet list reference,dotnet remove reference
      • 项目的包管理,dotnet add package,dotnet remove package
    • 其他命名,如使用ef,dotnet ef,启动文件观察程序dotnet watch

    常用命令

    dotnet build命令

    #创建MVC工程
    [zebra Desktop]$mkdir work && cd work
    [zebra work]$dotnet new console -n Zebra.Liu.Console
    
    #添加Nuget包,这是添加了mysql的驱动包
    [zebra work]$cd Zebra.Liu.Console/
    [zebra Zebra.Liu.Console]$dotnet add package Pomelo.EntityFrameworkCore.MySql
    [zebra Zebra.Liu.Console]$ls
    Program.cs Zebra.Liu.Console.csproj  obj
    
    #编译工程,输出到build文件夹中
    [zebra Zebra.Liu.Console]$dotnet build -o build/
    [zebra Zebra.Liu.Console]$ls
    Program.cs Zebra.Liu.Console.csproj build obj
    
    #多了一个build文件夹,用于存放编译后的文件
    [zebra Zebra.Liu.Console]$ls build/
    Zebra.Liu.Console.dll  #二进制文件(中间语言IL)
    Zebra.Liu.Console.pdb  #symbol文件,用于调试
    Zebra.Liu.Console.deps.json # *.deps.json中列出应用程序的依赖项
    Zebra.Liu.Console.runtimeconfig.dev.json
    Zebra.Liu.Console.runtimeconfig.json # 指定共享运行时以其版本
    

    上面的试验可以看出build命令最后的产物,如果有项目使用了第三方的依赖,如像上面一样使用了NuGet中的MySQL驱动,那么在执行build命令时,只会从本机的NuGet缓存库中解析依赖项,也就是说,生成的dll文件,不包含MySQL的驱动。这样build的dll文件,从本机拷贝到另外的机器上,可能不能运行。如果要将依赖项也打包,可以使用另一个命令dotnet publish

    publish命令和build命令最大的区别在于:publish命令将应用程序的依赖项,从NuGet缓存复制到输出文件夹中。

    build后的程序是否为可执行,主要看.csproj文件中的选项

    <!-- .csproj文件内容 -->
    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <!-- 
          OutputType 输出类型设置为Exe,说明这个工程,可执行
          可执行的dll和不可执行的dll文件最大的区别在于,有没有入口点以及是否可执行
         -->
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp2.1</TargetFramework>
      </PropertyGroup>
    
    </Project>
    

    dotnet clean命令

    清除上一个生成的输出,包括中间文件夹(obj)和最终输出文件夹(bin)中的文件

    dotnet sln命令

    使用dotnet sln命令,可以在*.sln,文件中添加,删除,获取项目。

    dotnet sln [<solution_name>] add <project> <project>

    dotnet sln [<solution_name>] add <globbing_pattern>

    dotnet sln [<solution_name>] remove <project> <project>

    dotnet sln [<solution_name>] remove <globbing_pattern>

    dotnet sln [<solution_name>] list

    注意:dotnet sln命令只会对solution_name.sln文件中操作,要生成*.sln文件,可以使用dotnet new sln命令

    dotnet add/remove/list reference命名

    管理项目之间的引用关系

    # 项目1引用项目2
    [zebra work]$dotnet add 项目1 reference 项目2
    

    使用CLI创建多项目的解决方案

    本章将用cli,按照DDD的分层架构来创建包含多个项目的解决方案,方案的结构大致如下:

    # 工程目标结构
    - Shopping.sln
     |- Shopping.UI
     |- Shopping.Application
     |- Shopping.Domain
     |- Shopping.Infrastructure
    
    # 工程引用关系
    Shopping.UI
        |
        V
    Shopping.Application
        |           \
        V            \
    Shopping.Domain   \
        |              \
        V               V
    Shopping.Infrastructure
    

    脚本如下:

    # 创建目录
    [zebra ~]$mkdir Shopping && cd Shopping
    
    # 创建工程 UI为MVC类型,其余全部是classlib
    [zebra Shopping]$dotnet new mvc -n Shopping.UI
    [zebra Shopping]$dotnet new classlib -n Shopping.Application
    [zebra Shopping]$dotnet new classlib -n Shopping.Domain
    [zebra Shopping]$dotnet new classlib -n Shopping.Infrastructure
    
    # 添加工程之间的引用
    [zebra Shopping]$dotnet add Shopping.UI reference Shopping.Application
    [zebra Shopping]$dotnet add Shopping.Application reference Shopping.Domain
    [zebra Shopping]$dotnet add Shopping.Application reference Shopping.Infrastructure
    [zebra Shopping]$dotnet add Shopping.Domain reference Shopping.Infrastructure
    
    # 创建Shopping.sln文件,将工程文件加入到解决方案(.sln)文件中
    [zebra Shopping]$dotnet new sln -n Shopping
    [zebra Shopping]$dotnet sln add Shopping.*
    
    # 添加NuGet依赖包,这里以在Shopping.Infrastructure工程中添加MySQL驱动为例
    [zebra Shopping]$cd Shopping.Infrastructure/
    [zebra Shopping.Infrastructure]$dotnet add package Pomelo.EntityFrameworkCore.MySql
    

    相关文章

      网友评论

        本文标题:.NET Core CLI命令行接口

        本文链接:https://www.haomeiwen.com/subject/pmhgaftx.html