.NET Core 和 System.Drawing
Posted
技术标签:
【中文标题】.NET Core 和 System.Drawing【英文标题】:.NET Core and System.Drawing 【发布时间】:2017-04-15 00:02:52 【问题描述】:我试图在针对 net46 的 .net 核心控制台应用程序中引用 System.Drawing,但程序集不存在。 根据 MS,如果您使用 dotnetcore System.Drawing 不可用。但是如果你引用完整的 .net 框架,你应该可以使用它
这是我的 project.json
"version": "1.0.0-*",
"buildOptions":
"emitEntryPoint": true
,
"dependencies":
,
"frameworks":
"net46":
知道问题出在哪里
【问题讨论】:
您是否首先阅读了自己的问题?您的第一句话说我正在尝试在针对 net46 的 .net 核心控制台应用程序中引用 System.Drawing,这告诉我您不了解 ASP.NET Core 和 .NET Core 之间的区别。我只是为您解释了它,以帮助您避免将来混淆或解决您的问题。因为对于阅读该问题的人来说,不清楚是否要在 .NET Core、.NET 框架上运行它。这是矛盾的,因为 .NET Core 和 .NET Framework 是互斥的。 ASP.NET Core 在两者上都运行,但 ASP.NET Core 是一个 webstack,而不是运行时 @Tseng 谁提到了asp.net?你提到了,伙计。 我完全同意你的看法。我的意思是 VS 模板。但是我没有提到 ASP.NET 【参考方案1】:我知道这是旧的,但现在有一个名为 System.Drawing.Common
的库端口。尝试使用 NuGet 安装那个。
为了实现这一点,有一个名为Windows Compatibility Pack
的元包。但是,这个元包包含很多很多与 Windows 相关的 API(作为包分发)。
来源:https://developers.de/2018/01/22/how-to-use-system-drawing-in-net-core/
【讨论】:
同样重要的是要考虑:顾名思义:它只适用于 Windows。这可能是也可能不是问题。 System.Drawing.Common 适用于 Windows、Linux 和 macOS。在 Linux 和 macOS 上,您需要安装其原生依赖项 ligdiplus。您可以使用apt-get install -y libgdiplus
或brew install mono-libgdiplus
。【参考方案2】:
添加 NuGet 引用 Microsoft.Windows.Compatibility
注意:标记“包括预发布”
当然,它只有在预发布包适合您的情况下才有效。
【讨论】:
现在 netcore3 出来了,这应该是公认的答案。【参考方案3】:System.Drawing
是not a good option with ASP.NET
如果你想要图形处理,我建议在 .Net Core 上使用 ImageSharp (https://github.com/JimBobSquarePants/ImageSharp) 或在 .Net Framework 上使用 ImageProcessor (http://imageprocessor.org/) / ImageResizer (https://imageresizing.net/)
另外,如果你真的需要使用 System.Drawing
将你的 project.json 中的框架更改为 netstandard1.6
并添加依赖项 "NETStandard.Library": "1.6.1"
【讨论】:
谢谢。虽然它仍然是 Alpha 版本并且找不到任何文档。希望不存在错误,因为我将在生产环境中运行它。很快。 我刚刚意识到我的项目中还针对完整的 .NET Framework,并且我引用了"NETStandard.Library": "1.6.1"
,但怎么会呢? .NET Standard 是一种“契约”,它公开了所有框架都应该实现的一些 API。 System.Drawing
is quite empty in .NET Core 目前,我在 Twitter 上被告知,即使即将推出 .NET Standard 2.0,也不会有类似于完整 .NET Framework 上现有的 System.Drawing 实现。我不明白
很遗憾imagesharp的图片格式非常有限,根本不支持webp。很多支持 webp 的库和其他库都依赖于 system.drawing。
我删除了链接,因为该域已被删除,现在链接到垃圾邮件。【参考方案4】:
当您只想在 .NET Full Framework 上使用 asp.net core 时,您可以像这样引用旧的类库
"version": "1.0.0-*",
"frameworks":
"net452":
"dependencies":
,
"frameworkAssemblies":
"System.Drawing": "4.0.0.0",
【讨论】:
【参考方案5】:我能够将 System.Drawing 替换为名为 SkiaSharp 的多平台库。如果你在linux上运行,你也可以安装this nuget,这样你就不必手动安装依赖了。
【讨论】:
以上是关于.NET Core 和 System.Drawing的主要内容,如果未能解决你的问题,请参考以下文章
NET Core 拓展方法和中间件集合(支持NET Core2.0+)
如何在 .NET Core 3.0 SDK 上构建多目标 .NET 5 和 .NET Core 3.1
带有 EF Core 和 CosmosDB .NET 5 的 ASP.Net Core - IdentityRole 问题