IIS部署ASP.NET Core报错:HTTP Error 500.38 – Failed to locate ASP.NET Core app

在使用IIS部署ASP.NET Core程序时,遇到报错,错误信息如下 :HTTP Error 500.38 – Failed to locate ASP.NET Core app

经过一番搜索,在微软官方网站中找到了错误原因,网站如下:https://learn.microsoft.com/zh-cn/aspnet/core/test/troubleshoot-azure-iis?view=aspnetcore-7.0

在这个排查页面上可以看到,这个错误是未禁用单文件发布导致的,那么,我们只要在项目文件中禁用单文件发布就行了。

解决:在IIS部署时,禁用单文件发布。编辑xxx.csproj项目文件(xxx是你的项目名字),把PublishSingleFile这一项改为false,如果没有,直接添加下面的代码即可。

<PublishSingleFile>false</PublishSingleFile>	

如果使用VS的发布,要在发布选项中去掉单文件发布选项的钩:

Debian12安装dotnet sdk

安装微软源:

wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb

sudo dpkg -i packages-microsoft-prod.deb

rm packages-microsoft-prod.deb

安装 SDK

sudo apt-get update && sudo apt-get install -y dotnet-sdk-9.0

安装运行时

sudo apt-get update &&  sudo apt-get install -y aspnetcore-runtime-9.0

作为 ASP.NET Core 运行时的一种替代方法,你可以安装不包含 ASP.NET Core 支持的 .NET 运行时:将上一命令中的 aspnetcore-runtime-9.0 替换为 dotnet-runtime-9.0:

sudo apt-get install -y dotnet-runtime-9.0

使用 apt 更新 .NET

当有新的小版本更新时,只需使用以下命令通过 apt 进行升级:

sudo apt-get update
sudo apt-get upgrade

参考:https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-debian?tabs=dotnet9

解决 VS2022 包管理控制台找不到 add-migration 命令的问题

在使用EF命令进行迁移时,遇到了VS2022 包管理控制台 找不到  add-migration 命令的错误。

解决办法:

使用everything搜索 EntityFrameworkCore.psd1,然后在程序包管理控制台中执行命令:import-module EntityFrameworkCore.psd1的全路径

例如:

import-module C:\Users\wujie\.nuget\packages\microsoft.entityframeworkcore.tools\7.0.0\tools\EntityFrameworkCore.psd1 -Verbose

出现黄色警告不用管:

MariaDB 创建和删除数据库语句

创建数据库:

CREATE DATABASE `notes.wujie.me`;

加`号是因为数据库带了“.”

通常建议使用下划线(_)代替点号(.)等特殊字符,这样更符合一般的数据库命名规则。

查看数据库的字符集:

SHOW CREATE DATABASE `notes.wujie.me`;

建立数据库时指定字符集:

CREATE DATABASE `notes.wujie.me` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

删除数据库:

DROP DATABASE `notes.wujie.me`;

Windows 批处理脚本脚本连接mariadb时,配置数据库字符集

在通过命令行执行数据库脚本时,遇到错误:Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (gbk_chinese_ci,COERCIBLE) for operation '='

解决办法:

可以通过 --default-character-set=utf8mb4 参数来配置连接所用的默认字符集来解决,例如下面的数据库升级脚本:

@echo off
"C:\Program Files\MariaDB 10.6\bin\mysql" -uroot -p123456 -Dworksummarynet --default-character-set=utf8mb4 < ./upgrade.sql

echo Database upgrade completed!
pause

mariadb创建数据库时指定编码

在MariaDB中,创建数据库时,你可以指定数据库的字符编码(Character Set)和排序规则(Collation)。字符编码决定了数据库可以存储哪些字符,而排序规则则决定了字符的排序方式。这对于确保数据库能够正确处理多语言数据和特殊字符至关重要。

本文将介绍如何在创建数据库时指定字符编码和排序规则。

为什么要指定字符编码?

  1. 支持多语言数据:不同的编码支持不同的字符集。例如,如果你需要存储多语言数据,UTF-8编码(尤其是utf8mb4)是最合适的选择,因为它可以兼容大部分常见的字符集,支持包括表情符号(emoji)在内的特殊字符。
  2. 数据一致性:指定字符编码可以确保在数据库操作中字符不会丢失或被错误解析,避免出现乱码。
  3. 优化查询和排序:使用合适的排序规则可以优化查询速度和排序准确性,特别是当你需要对字符进行排序时。

步骤1:创建数据库时指定字符编码和排序规则

在MariaDB中,可以使用CREATE DATABASE语句来创建数据库时指定字符编码和排序规则。以下是两个常见的例子:

示例 1:创建使用UTF-8编码的数据库

CREATE DATABASE test 
DEFAULT CHARACTER SET utf8mb4 
COLLATE utf8mb4_general_ci;

解释:

  • utf8mb4 是一种UTF-8字符编码,支持所有Unicode字符,包括表情符号等特殊字符。
  • utf8mb4_general_ci 是常用的排序规则,ci表示不区分大小写(Case Insensitive)。在此排序规则下,A和a会被认为是相同的字符。
  • 该语句创建了一个名为 test 的数据库,并指定了utf8mb4字符编码和utf8mb4_general_ci排序规则。

示例 2:创建使用UTF-8编码的数据库

CREATE DATABASE blog 
DEFAULT CHARACTER SET utf8 
COLLATE utf8_general_ci;

解释:

  • utf8 是MariaDB较早版本支持的UTF-8编码,能够存储多语言字符,但不支持一些Unicode字符(如某些表情符号)。
  • utf8_general_ci 是utf8字符集的默认排序规则,也是不区分大小写的排序规则。
  • 该语句创建了一个名为 blog 的数据库,使用了utf8字符编码和utf8_general_ci排序规则。

步骤2:检查数据库的字符编码和排序规则

创建数据库之后,可以使用以下SQL语句检查数据库的当前字符编码和排序规则:

SHOW CREATE DATABASE test;

输出示例:

+----------+------------------------------------------------------------+
| Database | Create Database                                            |
+----------+------------------------------------------------------------+
| test     | CREATE DATABASE `test` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci |
+----------+------------------------------------------------------------+

这会显示你所创建数据库的字符编码和排序规则,确认是否与预期一致。

字符编码与排序规则的选择

  • utf8mb4:推荐用于所有支持Unicode字符的场景,特别是当你需要存储多语言内容或特殊符号(如表情符号)时。它是一个更完备的UTF-8编码。
  • utf8:适用于普通的多语言数据,但不支持某些Unicode字符,尤其是表情符号。建议仅在无法使用utf8mb4时选择它。
  • utf8_general_ci 与 utf8mb4_general_ci:这些是最常用的排序规则,适用于一般的文本排序。ci表示不区分大小写。
  • utf8_unicode_ci 与 utf8mb4_unicode_ci:这些排序规则支持更精确的Unicode字符排序,适用于需要对字符进行精确排序的场景(例如,区分重音符号等)。

步骤3:修改已创建数据库的字符编码和排序规则

如果已经创建的数据库没有使用你想要的字符编码或排序规则,你可以使用ALTER DATABASE语句来更改:

ALTER DATABASE test 
DEFAULT CHARACTER SET utf8mb4 
COLLATE utf8mb4_general_ci;

这将更改test数据库的字符编码和排序规则为utf8mb4和utf8mb4_general_ci。

注意事项

  • 兼容性:在选择字符编码时,请确保与当前的数据兼容。例如,utf8mb4比utf8消耗更多存储空间,因此在选择编码时要考虑到存储要求。
  • 迁移问题:如果你修改了已存在数据库的字符编码,需要小心数据迁移,确保数据不会因为编码不一致而丢失或变乱码。
  • 数据库性能:不同的字符编码和排序规则可能会影响数据库的性能。建议在高并发环境下做性能测试,确保选择的字符集和排序规则不会影响数据库查询的速度。

结论

通过在创建MariaDB数据库时指定字符编码和排序规则,可以确保数据库能够正确处理多语言数据并优化查询性能。推荐使用utf8mb4字符编码,因为它支持更广泛的Unicode字符,特别是表情符号等特殊字符。在进行数据库设计时,务必根据应用需求选择适合的字符集和排序规则,确保数据的一致性与兼容性。

--创建数据库时指定编码
create database test default character set utf8mb4 collate utf8mb4_general_ci;
create database blog default character set utf8 collate utf8_general_ci;