代码如下,在执行Encoding.GetEncoding(“gb2312”);方法后报错,说没有找到对应编码,经测试,发现是静态构造函数未执行。
public static class Encodings
{
/// <summary>
/// 注册相关编码
/// </summary>
static Encodings()
{
// .net core 不再支持gb2312编码 需要手动注册
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
}
/// <summary>
/// utf-8编码
/// </summary>
public static readonly Encoding UTF_8 = Encoding.UTF8;
/// <summary>
/// gb2312编码
/// </summary>
public static readonly Encoding GB2312 = Encoding.GetEncoding("gb2312");
}
将代码改成这样就恢复正常了:
public static class Encodings
{
/// <summary>
/// 注册相关编码
/// </summary>
static Encodings()
{
// .net core 不再支持gb2312编码 需要手动注册
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
UTF_8 = Encoding.UTF8;
GB2312 = Encoding.GetEncoding("gb2312");
}
/// <summary>
/// utf-8编码
/// </summary>
public static readonly Encoding UTF_8;
/// <summary>
/// gb2312编码
/// </summary>
public static readonly Encoding GB2312;
}
推测是编译器认为静态构造函数无用,被优化掉了。
也可能是静态函数的调用方式并非在类加载时调用,而是在实例化static readonly
参数时参数才会调用。文章来源:https://www.toymoban.com/news/detail-691949.html
查找了不少相关资料,并未找到任何证据支持上面的观点。不过我尝试了反编译dll,发现dll中还是有构造函数的,应该没有被优化掉。文章来源地址https://www.toymoban.com/news/detail-691949.html
到了这里,关于C# 静态构造函数未执行 .net core框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!