实体框架”;启用迁移”;命令生成用ANSI编码的Configuration.cs文件.为什么?

本文关键字:Configuration 编码 cs 为什么 ANSI 文件 启用 框架 迁移 命令 实体 | 更新日期: 2023-09-27 18:29:18

我正在为一个项目使用EF Code First进行迁移,我偶然发现了一个奇怪的行为:

在Package Manager控制台中执行"Enable Migrations"-命令会生成一个"Migrations"文件夹和"Configurations.cs"文件。当我在Notepad++中检查"Configurations.cs"的编码时,它显示它是ANSI编码的。

当我在VisualStudio2010中创建任意文件时,它总是以UTF-8编码。为什么NuGet会以另一种编码生成文件?

提前感谢,Chris

实体框架”;启用迁移”;命令生成用ANSI编码的Configuration.cs文件.为什么?

我终于抽出时间对此进行了适当的调查。。。

文件(Configuration.cs和单个迁移文件)实际上是以UTF-8保存的,没有文件签名。除非非ANSI字符出现在文件中的某个位置,否则此格式与ANSI无法区分。如果文件中有非ANSI字符,像Notepad++这样的工具只会将其显示为UTF-8。这是因为只有ANSI字符的UTF-8文件与ANSI格式100%兼容。

如果上下文类型名称、表名等中有非ANSI字符,事情会如您所期望的那样进行,Notepad++会将文件格式报告为UTF-8。

配置文件实际上存储为NuGet包中程序集中嵌入的模板,然后在使用Enable Migrations时进行处理并复制到您的项目中。存储的模板是ANSI文件,因此您获得的文件是ANSI文件。您应该能够将其重新保存为UTF-8——运行时不会在意。