net core System.Drawing is not supported on this platform.

在使用.NET Core进行开发时遇到了`System.Drawing`库不被平台支持的异常,导致`Bitmap`构造函数无法实例化。问题出现在创建验证码图片的代码中,具体为`CreateValidateGraphic`函数。发布应用时,`System.Drawing.common.dll`生成异常,文件大小异常。解决方案是寻找并替换正确的dll文件。此问题涉及到.NET Core的依赖性和平台兼容性。
System.Drawing is not supported on this platform.
System.PlatformNotSupportedException: System.Drawing is not supported on this platform.
   at System.Drawing.Bitmap..ctor(Int32 width, Int32 height)
   at M10008.CaSignMiniPro.Shared.ValidateCode.CreateValidateGraphic(String validateCode, Int32 fontSize, Int32 lineHeight) in E:\11code\11casignMinipro\M10008.CaSignMiniPro\Shared\Tools\ValidateCode.cs:line 49
   at M10008.CaSignMiniPro.Application.BasicApplication.CreateImgCode() in E:\11code\11casignMinipro\M10008.CaSignMiniPro\Application\BasicApplication.cs:line 89
   at M10008.CaSignMiniPro.Service.BasicService.ImgCode() in E:\11code\11casignMinipro\M10008.CaSignMiniPro\Service\BasicService.cs:line 221

 

 

net core publish 发布命令的时候 

System.Drawing.common.dll生成有问题

 

 这个dll文件正常是600kb的,每次生成都会把这个小文件的dll打出来.

 

替换一下就行...去自己的包源找一下

 

 

 

 

 

 

 
<think>我们正在解决用户在使用System.Data.OleDb时遇到的PlatformNotSupportedException异常。这个异常通常发生在尝试在不支持OLE DB的平台上使用它时,例如在.NET Core.NET 5+的某些环境中,因为System.Data.OleDb在这些环境中并不是默认被支持的。 根据用户的需求,我们可以提供以下解决方案: 1. **使用其他数据提供程序**:如果目标数据库有特定的.NET Core提供程序,建议使用它。例如: - 对于SQL Server:使用`System.Data.SqlClient`或`Microsoft.Data.SqlClient`。 - 对于Oracle:使用`Oracle.ManagedDataAccess.Core`。 - 对于ODBC:使用`System.Data.Odbc`(这个在.NET Core中是支持的)。 - 对于其他数据库,寻找对应的ADO.NET Core提供程序。 2. **使用ODBC作为替代**:如果数据库有ODBC驱动程序,可以使用ODBC连接来代替OLE DB。在.NET Core中,`System.Data.Odbc`是支持的。 3. **升级到支持OLE DB的.NET版本**:在.NET Framework中,OLE DB是支持的。如果应用可以运行在.NET Framework上,那么不会出现此问题。但是,如果应用需要跨平台,则不建议此方法。 4. **使用第三方库**:有一些第三方库提供了对OLE DB的支持,但需要注意兼容性和稳定性。 5. **迁移到Entity Framework Core**:如果应用使用OLE DB访问数据库,可以考虑迁移到Entity Framework Core,它支持多种数据库,并且可以避免直接使用底层提供程序。 6. **检查目标平台**:确保在支持OLE DB的平台上运行。例如,在Windows上,.NET Core 3.0及以上版本重新引入了对OLE DB的支持(通过`System.Data.OleDb`包),但仅限于Windows平台。因此,如果运行在非Windows平台(如Linux或macOS),则无法使用。 因此,具体步骤: - 如果运行在Windows上,并且使用的是.NET Core 3.0或更高版本,可以通过NuGet安装`System.Data.OleDb`包: ```bash Install-Package System.Data.OleDb ``` 然后在代码中使用`OleDbConnection`等类。 - 如果运行在非Windows平台,那么必须使用其他替代方案(如ODBC或特定数据库提供程序)。 用户需要根据自己使用的数据库类型和运行环境选择合适的方案。 下面是一个使用ODBC连接Access数据库的示例(因为用户可能在使用Access数据库,而Access通常使用OLE DB,但也可以通过ODBC连接): 使用ODBC连接Access(需要安装Access的ODBC驱动程序): ```csharp using System.Data.Odbc; string connectionString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\path\\to\\database.accdb;"; using (var connection = new OdbcConnection(connectionString)) { connection.Open(); // 执行命令等 } ``` 注意:在非Windows平台上,可能没有Access的ODBC驱动程序,所以Access数据库通常只能在Windows上使用。如果用户使用的是其他数据库(如SQL Server),则可以使用对应的ODBC驱动程序。 因此,总结解决方案: - 如果是Windows平台,且使用.NET Core 3.0+,安装`System.Data.OleDb`包。 - 否则,使用ODBC(如果数据库有ODBC驱动程序)或数据库特定的提供程序。 - 考虑迁移到其他数据库访问技术(如Entity Framework Core)并使用支持的提供程序。 根据用户引用的内容,我们注意到引用的内容是关于System.Data.OleDb.OleDbTransaction等类的,这说明用户在使用OLE DB进行事务处理。在替代方案中,如果使用ODBC,则可以使用`OdbcTransaction`;如果使用SqlClient,则使用`SqlTransaction`,以此类推。 因此,我们建议用户根据实际情况选择替代方案。 下面我们生成相关问题:</think>### 解决 System.PlatformNotSupportedExceptionSystem.Data.OleDb 不受支持的错误 当在 .NET Core/.NET 5+ 环境中使用 `System.Data.OleDb` 时,会遇到此错误,因为该组件在非 Windows 平台或新框架版本中不再默认支持。以下是解决方案: --- #### 1. **确认运行环境** - **仅 Windows 支持**:OleDb 仅在 **Windows 平台**的 .NET Core 3.0+ 中可用 - 检查项目目标框架: ```xml <!-- 项目文件 (.csproj) 需包含 --> <TargetFramework>net6.0-windows</TargetFramework> <!-- 或 netcoreapp3.1-windows --> ``` --- #### 2. **添加 NuGet 包显式引用** 通过 NuGet 安装官方包: ```bash Install-Package System.Data.OleDb ``` 或在 `.csproj` 中添加: ```xml <ItemGroup> <PackageReference Include="System.Data.OleDb" Version="6.0.0" /> </ItemGroup> ``` --- #### 3. **替代方案(跨平台推荐)** | 数据库类型 | 替代方案 | |------------------|--------------------------------------------------------------------------| | **SQL Server** | 使用 `Microsoft.Data.SqlClient` | | **Excel/Access** | 改用 [NPOI](https://github.com/nissl-lab/npoi) 或 [ClosedXML](https://github.com/ClosedXML/ClosedXML) | | **ODBC 数据源** | 使用 `System.Data.Odbc` | | **通用方案** | 迁移到 Entity Framework Core + 数据库专用提供程序 | **示例:ODBC 替代 OleDb** ```csharp // 原 OleDb 连接 // var conn = new OleDbConnection("Provider=SQLOLEDB;..."); // 改用 ODBC using var conn = new OdbcConnection("Driver={SQL Server};Server=..."); conn.Open(); ``` --- #### 4. **平台兼容性处理** 添加运行时条件检查: ```csharp if (!OperatingSystem.IsWindows()) { throw new NotSupportedException("OleDb requires Windows"); } // 否则正常使用 OleDb ``` --- #### 5. **迁移到 Entity Framework Core** 长期解决方案(支持跨平台): ```bash Install-Package Microsoft.EntityFrameworkCore.SqlServer ``` ```csharp services.AddDbContext<AppDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Default"))); ``` > **关键原因**:OleDb 依赖 Windows 的 COM 组件,在 Linux/macOS 或 .NET 5+ 的轻量化运行时中不可用[^1]。微软官方建议在新项目中避免使用 OleDb。 --- ### 相关问题 1. 如何在 Linux 上连接 Access 数据库? 2. Entity Framework Core 与 ADO.NET 的性能对比? 3. 如何迁移 OleDb 代码到 ODBC? 4. .NET 7 中是否支持 Jet OLEDB 驱动? 5. 使用 NPOI 操作 Excel 的最佳实践? [^1]: 微软官方文档指出:`System.Data.OleDb` 在 .NET Core 中仅限 Windows 平台使用,且部分功能(如 Jet OLEDB)已弃用。详见 [OleDb 平台兼容性说明](https://docs.microsoft.com/en-us/dotnet/api/system.data.oledb)。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值