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

时间:2017-11-06 12:36:48

标签: c# .net-core system.drawing multiplatform

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

System.Drawing可以在没有任何外部依赖性的Windows上运行。

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

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