web-dev-qa-db-ja.com

.NET CoreおよびSystem.Drawing

Net46をターゲットとする.netコアコンソールアプリでSystem.Drawingを参照しようとしていますが、アセンブリがありません。 MSによると、dotnetcoreを使用している場合、System.Drawingは使用できません。しかし、完全な.netフレームワークを参照すれば、それを使用できるはずです。

これは私のproject.jsonです

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

    "dependencies": {

    },

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

問題は何ですか

17
pantonis

System.DrawingはASP.NETでは適切なオプションではありません(詳細: http://www.asprangers.com/post/2012/03/23/Why-you-should-not-use-SystemDrawing -from-ASPNET-applications.aspx

グラフィック操作が必要な場合は、.Net CoreまたはImageProcessor( http://imageprocessor.org/ )でImageSharp( https://github.com/JimBobSquarePants/ImageSharp )を使用することをお勧めします)/ .Net Framework上のImageResizer( https://imageresizing.net/

また、本当にSystem.Drawingを使用する必要がある場合は、project.jsonのフレームワークをnetstandard1.6に変更し、依存関係を追加してください"NETStandard.Library": "1.6.1"

13
J. Doe

NuGet参照を追加Microsoft.Windows.Compatibility

注意:「プレリリースを含める」をマークしてください

もちろん、プレリリースパッケージに問題がない場合にのみ機能します。

13
Nikolay Pakudin

私はこれが古いことを知っていますが、System.Drawing.Commonというライブラリの移植版があります。 NuGetでインストールしてみてください。

これを可能にするために、Windows Compatibility Packというメタパッケージがあります。ただし、このメタパッケージには、Windowsに関連する多数のAPI(パッケージとして配布)が含まれています。

ソース: https://developers.de/2018/01/22/how-to-use-system-drawing-in-net-core/

10
infl3x

.NET Full Frameworkでasp.netコアを使用したい場合のみ、このような古いクラスライブラリを参照できます

{
  "version": "1.0.0-*",

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


    }
  }
}
4
guest

System.Drawingを SkiaSharp と呼ばれるマルチプラットフォームライブラリに置き換えることができました。 Linuxで実行している場合は、 this nuget をインストールして、依存関係を手動でインストールする必要がないようにすることもできます。

0
kurdemol94