VSCode开发ASP.NET WEBAPI环境

2024-06-04 6142阅读

1.WINDOWS10系统WSL2安装Oracle Linux 7.9子系统(包含DOCKER以及使用DOCKER部署MYSQL-8.3.0)

(1)在管理员的Windows PowerShell执行命令(打开“适用于Linux的Windows子系统”)

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

(2)在管理员的Windows PowerShell执行命令(打开“虚拟机平台”)

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

(3)重启电脑

(4)设置WSL默认版本

wsl --set-default-version 2

(5)更新WSL

wsl --update

(6)重启WSL

wsl --shutdown

(7)重启电脑

(8)查看可以安装Linux版本(DSN配置成114.114.114.114)

wsl --list --online

NAME FRIENDLY NAME

Ubuntu Ubuntu

Debian Debian GNU/Linux

kali-linux Kali Linux Rolling

Ubuntu-18.04 Ubuntu 18.04 LTS

Ubuntu-20.04 Ubuntu 20.04 LTS

Ubuntu-22.04 Ubuntu 22.04 LTS

OracleLinux_7_9 Oracle Linux 7.9

OracleLinux_8_7 Oracle Linux 8.7

OracleLinux_9_1 Oracle Linux 9.1

openSUSE-Leap-15.5 openSUSE Leap 15.5

SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4

SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5

openSUSE-Tumbleweed openSUSE Tumbleweed

(9)安装Oracle Linux 7.9

wsl --install -d OracleLinux_7_9

PS C:\Users\Administrator> wsl --install -d OracleLinux_7_9

正在安装: Oracle Linux 7.9

已安装 Oracle Linux 7.9。

正在启动 Oracle Linux 7.9…

Installing, this may take a few minutes…

Please create a default UNIX user account. The username does not need to match your Windows username.

For more information visit: https://aka.ms/wslusers

Enter new UNIX username: ybjk

Changing password for user ybjk.

New password:

BAD PASSWORD: The password is shorter than 8 characters

Retype new password:

passwd: all authentication tokens updated successfully.

Installation successful!

[ybjk@DESKTOP-AKD562M ~]$

(10)重新打开Windows PowerShell查看子系统状态

wsl -l -v

PS C:\Users\Administrator> wsl -l -v

NAME STATE VERSION

  • OracleLinux_7_9 Stopped 2

    (11)确认处于Stopped状态,否则运行下列命令后重新执行(10)步骤

    wsl --terminate OracleLinux_7_9

    (12)执行下列命令将子系统备份至D盘

    wsl --export OracleLinux_7_9 D:\OracleLinux_7_9.tar

    (13)卸载C盘的OracleLinux_7_9系统,命令如下

    wsl --unregister OracleLinux_7_9

    (14)在D盘创建文件夹OracleLinux-Sys并将备份的系统(OracleLinux_7_9.tar)恢复到文件夹

    wsl --import OracleLinux_7_9 D:\OracleLinux-Sys D:\OracleLinux_7_9.tar --version 2

    (15)在Microsoft Store安装Windows Terminal

    (16)关闭Windows PowerShell打开Windows Terminal,默认会打开Windows Terminal,可以再增加一个OracleLinux_7_9命令窗口,在命令窗口设置root用户密码,命令如下

    passwd

    [root@DESKTOP-AKD562M ~]# passwd

    Changing password for user root.

    New password:

    BAD PASSWORD: The password is shorter than 8 characters

    Retype new password:

    passwd: all authentication tokens updated successfully.

    (17)从OracleLinux-R7-U9-Server-x86_64-dvd.iso光盘镜像中获得repodata和Packages文件夹复制到D盘

    (18)在Windows Terminal的OracleLinux_7_9命令窗口进入/mnt下创建IOS文件夹,并进入IOS文件夹,执行命令

    cp …/d/repodata ./ -r

    cp …/d/Packages ./ -r

    (19)在Windows Terminal的OracleLinux_7_9命令窗口执行如下命令

    vim /etc/yum.repos.d/oracle-linux-ol7.repo

    修改

    [ol7_latest]

    name=Oracle Linux r e l e a s e v e r L a t e s t ( releasever Latest ( releaseverLatest(basearch)

    baseurl=https://yum o c i r e g i o n . ociregion. ociregion.ocidomain/repo/OracleLinux/OL7/latest/$basearch/

    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle

    gpgcheck=1

    enabled=0

    增加

    [ol7_local]

    name=Oracle Linux r e l e a s e v e r L o c a l ( releasever Local ( releaseverLocal(basearch)

    baseurl=file:///mnt/IOS/

    enabled=1

    执行

    yum clean all

    yum makecache(报错改后缀名)

    (20)在Windows Terminal的OracleLinux_7_9命令窗口进入/mnt下创建rpm文件夹,并进入rpm文件夹,执行命令

    wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.4.9-3.1.el7.x86_64.rpm

    wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-20.10.9-3.el7.x86_64.rpm

    wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-20.10.9-3.el7.x86_64.rpm

    wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-rootless-extras-20.10.9-3.el7.x86_64.rpm

    wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-scan-plugin-0.8.0-3.el7.x86_64.rpm

    wget https://www.rpmfind.net/linux/centos/7.9.2009/extras/x86_64/Packages/container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm

    wget https://www.rpmfind.net/linux/centos/7.9.2009/extras/x86_64/Packages/fuse-overlayfs-0.7.2-6.el7_8.x86_64.rpm

    wget https://www.rpmfind.net/linux/centos/7.9.2009/extras/x86_64/Packages/slirp4netns-0.4.3-4.el7_8.x86_64.rpm

    wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/fuse3-libs-3.6.1-4.el7.x86_64.rpm

    (21)在Windows Terminal的OracleLinux_7_9命令窗口进入/mnt/rpm目录下执行命令安装docker

    yum localinstall -y *.rpm

    (22)解决systemctl无效的操作,新增vim /etc/wsl.conf如下内容后

    [boot]

    systemd=true

    (23)在Windows Terminal的Windows PowerShell执行命令

    wsl --terminate OracleLinux_7_9

    (24)在Windows Terminal新增OracleLinux_7_9命令窗口开启系统运行下列命令启动docker

    systemctl enable docker

    systemctl start docker

    systemctl status docker

    (25)拉取mysql8.3.0镜像

    docker pull mysql:8.3.0

    (26)增加mysql用户进入用户家目录

    useradd mysql

    passwd mysql

    (27)创建数据持久化目录

    mkdir -p /home/mysql/data

    mkdir -p /home/mysql/logs

    mkdir -p /home/mysql/conf

    (28)编辑配置文件my.cnf,命令内容如下

    vim /home/mysql/conf/my.cnf

    #客户端设置

    [client]

    #客户端连接端口

    port=3306

    #客户端连接MySQLD通过mysql.sock文件进行通信(在同一台机器上)

    socket=/var/run/mysqld/mysqld.sock

    #设置MySQL客户端默认字符集

    default-character-set=utf8mb4

    #用mysql命令登陆数据库时的默认设置

    [mysql]

    设置MySQL客户端默认字符集

    default-character-set=utf8mb4

    #客户端连接MySQLD通过mysql.sock文件进行通信(在同一台机器上)

    socket=/var/run/mysqld/mysqld.sock

    #关闭自动补全sql命令功能

    no-auto-rehash

    #服务端设置

    [mysqld]

    #Mysql服务唯一编号区分主从

    server-id=1

    #服务端口号

    port=3306

    #用户

    user=mysql

    #允许远程访问

    bind-address=0.0.0.0

    #服务端使用的字符集默认为8比特编码

    character-set-server=utf8mb4

    #大小写敏感0,1和2不敏感,linux默认只能0

    lower_case_table_names=0

    #自动提交,执行修改语句时1不用手动提交

    autocommit=1

    创建新表时将使用的默认存储引擎

    default-storage-engine=InnoDB

    #数据存放目录

    basedir=/var/lib

    datadir=/var/lib/mysql

    pid-file=/var/run/mysqld/mysqld.pid

    #客户端连接MySQLD通过mysql.sock文件进行通信(在同一台机器上)

    socket=/var/run/mysqld/mysqld.sock

    #日志文件

    log-error=/var/run/mysqld/mysql.log

    设置时区为东八区

    default-time-zone = ‘+8:00’

    MySQL事务隔离

    transaction_isolation = REPEATABLE-READ

    允许最大连接数 默认:151,注意服务器内存cpu

    max_connections=1000

    #负责阻止过多尝试失败的客户端以防止暴力破解密码

    max_connect_errors = 6000

    #超过最大连接数会将请求放入back_log堆栈内

    #back_log限于系统对到来的TCP/IP连接的侦听队列的大小,超过无效。

    #如果等待连接的数量超过back_log,将不被授予连接资源。

    back_log = 600

    #mysql打开文件描述符的限制,最大连接数的五倍

    open_files_limit = 5000

    #表缓存文件描述符数量

    table_open_cache = 4000

    #单个sql数据大于1g或者产生的binlog文件大于1g报错

    max_allowed_packet=1G

    #只能使用IP地址检查客户端登录

    skip_name_resolve=1

    控制内存临时表的最大值,超过限值后就往硬盘写tmpdir(/tmp)

    tmp_table_size = 2048M

    是对查询的内存临时表排序或分组形成的heap表

    max_heap_table_size = 2048M

    #一个事务没有提交时产生的日志到Cache中,等提交时把日志持久化磁盘。

    binlog_cache_size = 12M

    binlog 配置二进制日志路径

    log_bin = /var/lib/mysql/binlog

    binlog 配置二进制日志最大

    max_binlog_size=1024M

    日志自动过期清理秒数

    binlog_expire_logs_seconds=86400

    binlog 配置二进制日志格式

    binlog-format = ROW

    #不是每次写入时都将binlog与硬盘同步系统崩溃binlog丢失语句

    #binlog在每N次binlog写入后与硬盘同步与InnoDB配合

    sync_binlog =1

    #读取表按数据文件顺序扫描缓存

    read_buffer_size = 8M

    MySQL的随机读缓冲区大小。

    read_rnd_buffer_size = 8M

    #MySQL执行排序使用的缓冲大小。

    sort_buffer_size = 8M

    联合查询操作所能使用的缓冲区大小

    join_buffer_size = 8M

    #重新利用保存在缓存中线程的数量,重新连接

    thread_cache_size = 8

    #使用键高速缓存来缓存索引内存1/4

    key_buffer_size = 1024M

    #全文索引最小索引长度默认4

    ft_min_word_len=4

    #设置InnoDB引擎最多可以同时打开缓冲池(Buffer Pool)中的表文件数量的变量

    innodb_open_files=4096

    #InnoDB使用一个缓冲池来保存索引和原始数据内存3/4

    innodb_buffer_pool_size = 512M

    innodb使用后台线程处理数据页上的读写请求,根据CPU核数设置默认是4

    #假如CPU是2颗8核的就是8和8读比写多10和6

    #范围1-64双核2-4每项四核4-8每项

    innodb_write_io_threads = 4

    innodb_read_io_threads = 4

    默认设置为0表示不限制并发数

    innodb_thread_concurrency = 0

    #设置为 1 时表示使用单独的清除线程清楚InnoDB无用数据

    innodb_purge_threads = 1

    #把log buffer刷到文件系统中(osbuffer)去调文件系统“flush”将缓存刷新到磁盘上去

    #0表示每隔一秒

    #1表示每次事务提交最终写入磁盘耗IO

    #2表示每次事务提交刷入文件系统数据库出问题文件系统好减少IO

    innodb_flush_log_at_trx_commit = 2

    #此参数确定些日志文件所用的内存大小以M为单位

    innodb_log_buffer_size = 16M

    #此参数确定数据日志文件的大小大性能好也会增加故障恢复时间

    innodb_log_file_size = 48M

    #提高性能MySQL可以以循环方式将日志文件写到多个文件MySQL8.0默认为2

    innodb_log_files_in_group = 2

    innodb主线程刷新缓存池中的数据脏数据比例小于90%

    innodb_max_dirty_pages_pct = 90

    InnoDB事务在被回滚之前可以等待一个锁定的超时秒数

    innodb_lock_wait_timeout = 60

    #命令行进入终端mysql -uroot -p进入

    #如果没有操作的时间超过了interactive_time设置的时间就会自动断开

    interactive_timeout = 28800

    #当一个客户端连接到MySQL数据库后没有操作数据库保留连接的时间

    #中途操作时间另算

    wait_timeout = 28800

    #开启慢查询日志

    #慢查询日志记录了执行时间超过long_query_time秒的查询

    slow_query_log=1

    慢查询日志位置(不会自动删除)

    slow_query_log_file = /var/lib/mysql/mysql-slow.log

    #设置记录慢查询超时时间

    long_query_time = 5

    (29)执行下列命令容器化mysql-8.3.0

    docker run --privileged=true -p 33060:3306 --name mysql830 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/logs:/var/log/mysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:8.3.0

    (30)进入容器,设置数据库

    ①进入容器

    docker exec -it mysql830 /bin/bash

    ②登录数据库

    mysql -uroot -p

    Enter password:12345678

    ③修改密码

    alter user ‘root’@‘localhost’ identified by ‘123456’;

    ④创建数据库

    create database jczs;

    ⑤创建用户

    create user ‘ybjk’@’%’ identified by ‘ybjk’;

    ⑥给用户授权

    grant all privileges on jczs.* to ‘ybjk’@’%’;

    flush privileges;

    (31)DBeaver下载驱动失败,在窗口首选项连接驱动MAVEN添加http://maven.aliyun.com/nexus/content/groups/public/最上,创建连接时下载驱动,驱动属性allowPublicKeyRetrieval true

    2.开发环境搭建。安装如下软件

    (1)Vscode,从Download Visual Studio Code - Mac, Linux, Windows下载System Installer版本,安装在D:\Vscode目录下,打开侧边栏“EXTENSIONS”面板。在搜索框中输入“Chinese”,查找出“中文简体”插件,点击“install”按钮, 按下“Ctrl+Shift+P”组合键以显示“命令面板”,然后键入“display”以筛选并显示“Configure Display Language”命令。按“Enter”,然后会按区域设置显示安装的语言列表,并突出显示当前语言设置。选择另一个“语言”以切换 UI 语言。

    (2)安装wsl,如果系统带有子系统会提示安装此插件

    (3)下载 .NET 8.0 SDK (v8.0.201) - Linux x64 Binaries (microsoft.com)开发包

    (4)将dotnet-sdk-8.0.201-linux-x64.tar.gz复制到/mnt/dotnet/目录下

    mkdir /mnt/dotnet

    cd /mnt/dotnet

    cp …/d/dotnet-sdk-8.0.201-linux-x64.tar.gz ./

    mkdir -p /usr/share/dotnet

    tar -xvf dotnet-sdk-8.0.201-linux-x64.tar.gz -C /usr/share/dotnet

    ln -s /usr/share/dotnet/dotnet /usr/local/bin

    (5)下载https://pan.baidu.com/s/1dMt94wW4JM3kq5lKn7PE6w?pwd=ee7h获得文件net8需要的环境libstdc.so-.6.0.26_c.gz,上传至/mnt/dotnet/目录下解压

    cp …/d/net8需要的环境libstdc.so-.6.0.26_c.gz ./

    tar -xvf net8需要的环境libstdc.so-.6.0.26_c.gz

    (6)如下操作

    删除链接

    rm /usr/lib64/libstdc++.so.6

    复制文件

    cp libstdc++.so.6.0x64_cwj/libstdc++.so.6.0.26 /usr/lib64/

    删除原版

    rm /usr/lib64/libstdc++.so.6.0.19

    重新建立链接

    ln -s /usr/lib64/libstdc++.so.6.0.26 /usr/lib64/libstdc++.so.6

    加载设置

    ldconfig

    环境变量设置

    vim /etc/profile

    末尾加上

    export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1

    保存后

    source /etc/profile

    (7)查看dotnet版本

    dotnet --version

    (8)打开Vscode连接到OracleLinux_7_9,菜单选查看终端,在终端里对WSL子系统的linux操作,这里在root家目录创建

    [root@DESKTOP-AKD562M ~]# mkdir Fund.Supervision.Manager

    (9)进入到Fund.Supervision.Manager文件夹内

    创建解决方案命令

    dotnet new sln --name Fund.Supervision.Manager

    Vscode打开文件夹Fund.Supervision.Manager

    创建WEBAPI项目

    [root@DESKTOP-AKD562M Fund.Supervision.Manager]# dotnet new webapi -o Fund.Supervision.API --no-https --use-controllers

    将Fund.Supervision.API添加到Fund.Supervision.Manager.sln,在sln文件所在目录执行,移除remove

    [root@DESKTOP-AKD562M Fund.Supervision.Manager]# dotnet sln add ./Fund.Supervision.API/Fund.Supervision.API.csproj

    编译命令

    [root@DESKTOP-AKD562M Fund.Supervision.Manager]# dotnet build

    执行命令

    [root@DESKTOP-AKD562M Fund.Supervision.Manager]# dotnet run --project ./Fund.Supervision.API/Fund.Supervision.API.csproj

    创建类库项目

    [root@DESKTOP-AKD562M Fund.Supervision.Manager]# dotnet new classlib -o Fund.Supervision.Model

    将Fund.Supervision.Model添加到Fund.Supervision.Manager.sln,在sln文件所在目录执行,移除remove

    [root@DESKTOP-AKD562M Fund.Supervision.Manager]# dotnet sln add ./Fund.Supervision.Model/Fund.Supervision.Model.csproj

    项目Fund.Supervision.API引用Fund.Supervision.Model项目

    [root@DESKTOP-AKD562M Fund.Supervision.Manager]# dotnet add ./Fund.Supervision.API/Fund.Supervision.API.csproj reference ./Fund

    .Supervision.Model/Fund.Supervision.Model.csproj

    在Fund.Supervision.API项目的Program.cs文件中将下列代码从花括号内移出避免发布后没有Swagger

    if (app.Environment.IsDevelopment())

    {

    }

    app.UseSwagger();

    app.UseSwaggerUI();

    重新编译命令

    [root@DESKTOP-AKD562M Fund.Supervision.Manager]# dotnet build

    执行命令

    [root@DESKTOP-AKD562M Fund.Supervision.Manager]# dotnet run --project ./Fund.Supervision.API/Fund.Supervision.API.csproj

    发布程序

    [root@DESKTOP-AKD562M Fund.Supervision.Manager]# dotnet publish

    创建mkdir /home/ybjk/FSM这个目录下的文件

    [root@DESKTOP-AKD562M publish]# pwd

    /root/Fund.Supervision.Manager/Fund.Supervision.API/bin/Release/net8.0/publish

    复制到/home/ybjk/FSM目录下

    Chmod +x Fund.Supervision.API

    [root@DESKTOP-AKD562M FSM]# vim appsettings.json

    {

    “Logging”: {

    “LogLevel”: {

    “Default”: “Information”,

    “Microsoft.AspNetCore”: “Warning”

    }

    },

    “AllowedHosts”: “*”,

    “urls”:“http://0.0.0.0:5000”

    }

    执行./Fund.Supervision.API

    在VSCode的扩展插件中,搜索并且安装Nuget Package Manager扩展插件

    使用ctrl + shift + p

    输入> nuget ,在下拉框中选择>Nuget Package Manager:Add Package

    获取版本失败修改/root/.vscode-server/extensions/jmrog.vscode-nuget-package-manager-1.1.6/out/src/actions/add-methods/fetchPackageVersions.js

    node_fetch_1.default(${versionsUrl}${selectedPackageName}/index.json.toLowerCase(),

    安装C#和C# Dev Kit插件

    发布后开放到局域网内appsettings.json

    “Kestrel”: {

    “Endpoints”: {

    “Http”: {

    “Url”: “http://0.0.0.0:5000”

    }

    }

    },


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]