.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 支持-
Dockerfile 示例:
ENV DOTNET_System_Drawing_EnableUnixSupport=true
-
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; }