.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 libgdiplusbrew 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 3.0和.net5有什么区别

细说.net core Startup

Asp.net core 配置文件

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 问题