.NET Core 和 System.Drawing

28

我正在尝试在针对.NET 4.6的.NET Core控制台应用程序中引用System.Drawing,但该程序集不存在。

根据微软的说法,如果您使用.NET Core,则无法使用System.Drawing。但是,如果您引用完整的.NET框架,则应该能够使用它。

这是我的project.json文件:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },

    "dependencies": {

    },

  "frameworks": {
    "net46": {
    }
  }
}

问题是什么?


1
你首先有没有读完自己的问题?你的第一句话说“我正在尝试在针对net46的.net core控制台应用程序中引用System.Drawing”,这告诉我你不理解ASP.NET Core和.NET Core之间的区别。我已经为你解释了,以帮助你避免将来的困惑或修复你的问题。因为对于阅读问题的人来说,不清楚你是否想在.NET Core、.NET Framework上运行它。这是矛盾的,因为.NET Core和.NET Framework是互斥的。ASP.NET Core可以在两者上运行,但ASP.NET Core是一个Web堆栈,而不是运行时。 - Tseng
3
@Tseng提到了asp.net吗?不,是你提到了它。 - pantonis
我完全同意你的观点。我指的是VS模板。但我没有提到ASP.NET。 - pantonis
6个回答

29

我知道这已经过时了,但现在有一个名为System.Drawing.Common的库端口。尝试使用NuGet安装它。

为了实现这一点,有一个名为Windows Compatibility Pack的元包。然而,这个元包包括许多与Windows相关的API(作为软件包分发)。

来源:https://developers.de/2018/01/22/how-to-use-system-drawing-in-net-core/


1
同样需要考虑的是:正如其名称所示,它只能在Windows上运行。这可能是一个问题,也可能不是。 - Christian Gollhardt
2
System.Drawing.Common可以在Windows、Linux和macOS上运行。在Linux和macOS上,您需要安装其本地依赖项ligdiplus。您可以执行apt-get install -y libgdiplusbrew install mono-libgdiplus - Frederik Carlier
2
只是提醒一下,在 .NET Core 7 中,它将不再支持其他平台。 - Sana Ahmed
似乎也不兼容WASM。即使是依赖的依赖关系中,也无法构建。 - undefined

27

添加NuGet引用Microsoft.Windows.Compatibility

注意:勾选“包括预发行版”

当然,只有在您允许使用预发布软件包的情况下才会有效。


1
现在netcore3已经发布,这应该是被接受的答案。 - Simon Mourier

20

System.Drawing与ASP.NET不兼容,不建议使用

如果你需要进行图形处理,我建议使用在.NET Core上的ImageSharp或在.NET Framework上的ImageProcessor / ImageResizer

另外,如果你真的需要用System.Drawing,请在project.json文件中将框架更改为netstandard1.6,并添加依赖项"NETStandard.Library": "1.6.1"


谢谢。虽然它仍处于Alpha版本,找不到任何文档。希望没有任何错误存在,因为我很快就要在生产环境中运行它。 - pantonis
我刚意识到我的项目也针对完整的.NET Framework,并且我有一个对“NETStandard.Library”:“1.6.1”的引用,但是为什么呢? .NET Standard是一种“契约”,它公开了所有框架都应该实现的一些API。目前,在.NET Core中,“System.Drawing”相当空虚(https://github.com/dotnet/corefx/tree/master/src/System.Drawing.Primitives/src/System/Drawing),我在Twitter上被告知即使很快就会推出.NET Standard 2.0,也不会有类似于完整.NET Framework上现有的System.Drawing实现。我不明白。 - Jérôme MEVEL
很不幸,Imagesharp的图像格式非常有限,完全没有WebP支持。几乎所有支持WebP和其他格式的库都依赖于System.Drawing。 - Douglas Gaskell
我已删除链接,因为该域名已被删除并且现在链接到垃圾邮件。 - Luke

4

当您仅想在.NET Full Framework上使用ASP.NET Core时,可以像这样引用旧的类库:

{
  "version": "1.0.0-*",

  "frameworks": {
    "net452": {
      "dependencies": {
      },
      "frameworkAssemblies": {
        "System.Drawing": "4.0.0.0",
      }
    }
  }
}

0

我成功地用一个名为SkiaSharp的跨平台库替换了System.Drawing

如果你正在Linux上运行,你也可以安装this NuGet package,这样你就不必手动安装依赖项了。


-2

针对 .NET 6 Core:

install Aspose.Drawing.Common

这有点简略。你能否详细说明一下?它在哪里执行(可能是某种命令行环境)?它是在哪个环境中测试的(包括版本)?您还可以引用文档。 (但请勿使用“编辑:”,“更新:”或类似内容 - 答案应该看起来像今天编写的)。 - Peter Mortensen
1
起初我也不理解这些评论,但它是在 Visual Studio 中的终端(或开发人员 PowerShell?)中执行的。这与在 NuGet 包管理器中安装它相同。 - Jannick Breunis
Aspose的许可证可能不受很多人的欢迎。至少需要$1197才能让一个开发者开发软件并在无限数量的位置使用,$1995让10个开发者开发的软件能够在最多10个位置使用,而$5586则让10个开发者开发的软件能够在无限数量的位置使用。未支付每月费用则不能制作SDK。我认为这个答案应该解释1.为什么现在需要第三方库。2.这是付费软件,需要支付许可费用,即使是非商业使用也没有免费选项。 - ProgrammingLlama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接