.Net 6 已知问题集

1、NET6 连 SQL2019 时,连接字符串上要加 TrustServerCertificate=True;  不然会报证书错误

2、NET6 在 Linux 系统中,会遇到 System.Drawing.Common 的问题

  • App Context
    在项目启动时,配置 AppContext Switch,设置 System.Drawing.EnableUnixSupport
    System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);

  • Runtime Config Json 
    在应用 build/publish 之后,会有一个 *.runtimeconfig.json我们可以直接修改这个文件
    1 {
    2    "runtimeOptions": {
    3       "configProperties": {
    4          "System.Drawing.EnableUnixSupport": true
    5       }
    6    }
    7 }
  • MS Build
    我们也可以在项目文件中添加一个下面的配置,作用和上面的直接修改 runtimeconfig.json 效果一样,只是 .NET SDK 会在生成的时候将这个配置写入到 runtimeconfig.json 中

    1 <ItemGroup>
    2       <RuntimeHostConfigurationOption Include="System.Drawing.EnableUnixSupport" Value="true" />
    3 </ItemGroup>
  • Environment Variable
    除此之外我们也可以配置环境变量 DOTNET_System_Drawing_EnableUnixSupport 来启用 Unix 支持

    1. Dockerfile 示例:

       ENV DOTNET_System_Drawing_EnableUnixSupport=true  

    2. Unix 示例:
       export DOTNET_System_Drawing_EnableUnixSupport true 

3、自带的 Linq 增强,和 MoreLinq 出现二义性,需要移除引用

4、System.ComponentModel.DataAnnotations 命名空间下的 ValidationContext 在 .NetCoreApp 3.1 和 .Net 6 上验证结果不一致

public String Validate()
{
	ValidationContext context = new ValidationContext(this, serviceProvider: null, items: null);
	List<ValidationResult> results = new List<ValidationResult>();
	bool isValid = Validator.TryValidateObject(this, context, results, true);

	if (isValid == false)
	{
		StringBuilder sbrErrors = new StringBuilder();
		foreach (var validationResult in results)
		{
			sbrErrors.AppendFormat("{0}; ", validationResult.ErrorMessage);
		}
		return sbrErrors.ToString();
	}

	if (this.UserInfo == null || string.IsNullOrEmpty(this.UserInfo.UserId))
		return QualityResource.UserNotExists;
	return string.Empty;
}

  

posted @ 2021-12-01 15:29  Richfiter  阅读(343)  评论(0编辑  收藏  举报