2022年9月

C# 中, 委托 ---> 匿名方法 ----> Lambda表达式 三者之间是层层演化的关系。


委托

什么是委托?委托也是一种类型,委托也是一种类型,委托也是一种类型,委托类型的变量指向方法。示例:

// 声明一个带有返回值的委托类型 Dtest
delegate int Dtest(int i, int j);

// 声明一个带有返回值的方法 Sum
public int Sum(int a, int b){
  return a + b;
}

// 声明一个委托变量,指向方法
Dtest devar = Sum;

// 通过委托调用一个方法
devar(1,2);

匿名方法

匿名方法,就是没有名字的方法。委托类型的变量不仅可以指向普通方法,也可以指向一个匿名方法。示例:

Func<string s,int r> f0 = delegate(string s1){
  return Convert.ToInt32(s);
};

匿名方法的声明,也是使用 delegate 关键字,如上。

Lambda 表达式

Lambda 表达式由匿名方法演进而来。示例:

Func<string s,int r> f0 = s1 => Convert.ToInt32(s);

如果只有一行代码,可以省略大括号和 return

其他,Action 与 Func

通常在业务开发中,开发者不必特意声明一个委托类型。使用系统内置的泛型委托 Action 和 Func 即可。两者的区别:
Action 是没有返回值的
Func 一定是有返回值的

Action ac = ()=> Console.WriteLine("hello world"); ac();
Action<int i, int j> ac2 = (a,b)=>Console.WriteLine(a+b); ac2(6,9);

Func<int i,int j> fun = i => i * 2;
int res = fun(3);

发布 asp.net6 项目时的配置

1、目标选择:文件

2、部署模式:独立

3、目标运行时: linux-x64

发布成功后,将项目打包并上传到 linux 服务器

linux 上的操作

1、在解压后的项目文件夹的同级目录中创建 Dockerfile

FROM centos

RUN yum -y install libicu

CMD mkdir -p /wwwroot/publish

COPY ./WebApplication /wwwroot/publish

WORKDIR /wwwroot/publish

CMD cd /wwwroot/publish

CMD chmod 777 WebApplication

EXPOSE 5000

ENTRYPOINT ./WebApplication

2、创建 docker 镜像到当前目录

docker build -t web-app:0.1 .

3、将 asp.net 项目以后台容器的方式运行

docker run -p 5000:5000 -d --name kestrel

可能会遇到的问题

1、Dockerfile 中的 From centos

因为 docker 中默认的centos:latest 是 centos8。但是centos8 已经停止维护,所以 yum 时候的源不可用。可以选择 centos7 也可以修改镜像。

修改镜像

1、启动一个 centos 的镜像实例

docker run -it -d centos

2、查看容器实例的 ID

docker ps
## 假如实例的 ID 是 c55dee3aa1de

3、将容器实例中的配置文件拷贝到宿主机目录,并进入宿主机目录

docker cp c55dee3aa1de:/etc/yum.respo.d ./etctmp
cd etctmp

4、修改配置文件 vim CentOS-Linux-BaseOS.repo 和 vim CentOS-Linux-AppStream.repo

两个文件的修改一致,主要是更换了 baseurl 的源

修改前

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/

修改后

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
baseurl=http://vault.centos.org/$contentdir/$releasever/AppStream/$basearch/os/

5、反向操作,将宿主机中修改后的文件拷贝回容器中

docker cp ../etctmp c55dee3aa1de:/etc/yum.respo.d ./etctmp

6、从修改后的容器实例创建一个新的镜像

docker commit -m "fixed repos" -a "yourname" centos:8.fixed

7、修改 Dockerfile ,再次创建一个带有 asp.net 的镜像

FROM centos:8.fixed

8、再次执行Linux上的操作

1.下载并安装 mysql5.7 的 yum 源

wget http://repo.mysql.com//mysql57-community-release-el6-8.noarch.rpm
rpm -ivh mysql57-community-release-el6-8.noarch.rpm

2.yum 安装 mysql5.7

yum install -y mysql-community-server

3.第二步如果遇到报错信息:Error:Unable to find a match: mysql-community-server,使用以下方式解决(禁用本地 mysql 模块后再安装):

yum module disable mysql
yum -y install mysql-community-server

4.如果第三步遇到报错信息: Error: Problem: cannot install the best candidate for the job,解决方案如下:

vim  /etc/yum.repos.d/mysql-community.repo

5.打开后,找到 [mysql57-community] 这一块配置(将加粗的两个位置更新一下)
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/

gpgcheck=0

其他问题:
获取 'root'@'localhost' 用户的临时密码:

grep 'temporary password' /var/log/mysqld.log

使用临时密码登录后,修改 'root'@'localhost' 的密码

alter user 'root'@'localhost' identified by 'Abc@123456';

授予任意主机远程连接此 mysql 服务器的所有权限

grant all privileges on *.* to 'root'@'%' identified by 'Abc@123456' with grant option;