从多台机器(多个操作系统)使用 System.Drawing 包

dan*_*ela 0 c# system.drawing multiplatform .net-core

我们正在构建一个使用 System.Drawing 包的 .Net Core 2.0 C# Web 应用程序。

我在Mac上编写代码,但它也会在Windows机器上开发,并部署到Linux服务器上。

要在 OSX 上使用 System.Drawing,我必须将 runtime.osx.10.10-x64.CoreCompat.System.Drawing Nuget 包添加到我的项目依赖项中。

但该代码现在无法在 Windows 机器上运行。当尝试使用 Graphics(System.Drawing 的一部分)对象的 DrawString 方法时,我们得到 System.AccessViolationException。

所以,我的问题是解决这个问题的常用方法是什么?是否可以在这个多操作系统设置中使用 System.Drawing 类?

Fre*_*ier 5

相同的 System.Drawing 代码应该可以在 Linux、Windows 和 macOS 上运行,无需任何更改。您是正确的,您需要手动安装 libgdiplus (例如通过brew install mono-libgdiplus)或引用runtime.osx.10.10-x64.CoreCompat.System.DrawingSystem.Drawing 才能在 Mac 上工作。

System.Drawing 将在 Windows 上运行,无需任何外部依赖项。

如果您仍在使用 CoreCompat.System.Drawing(我维护的),我建议您迁移到 System.Drawing.Common - 这是 System.Drawing for .NET Core 的 Microsoft 实现。

如果问题仍然在 Windows 上重现,您最好的选择是复制一段可用于重现您的问题的代码,以便我可以查看它。