Question: I've created .NET Core class library and try to build it against net40 framework. I want to use Clipboard class from System.Windows.Forms assembly. How can I do this?

My project.json file:

```
{
    "version": "1.0.0-*",

    "dependencies": {
        "NETStandard.Library": "1.6.0"
    },

    "frameworks": {
        "netstandard1.6": {
            "imports": "dnxcore50",
            "buildOptions": {
                "define": [
                    "NETCORE"
                ]
            },
            "dependencies": {
                "System.Threading": "4.0.11",
                "System.Threading.Thread": "4.0.0",
                "System.Threading.Tasks":  "4.0.11"
                }
        },
        "net40": {
            "buildOptions": {
                "define": [
                    "NET40"
                    ]
                },
            "dependencies": {
                // dependency should be here but there is no such dll
            }
        }
    }
}

```

All my net40 specific code is under NET40 define. Any thoughts?

Answer: 
What you need is [`"frameworkAssemblies"`](https://learn.microsoft.com/en-us/dotnet/articles/core/tools/project-json#frameworkassemblies), for example:

```
"frameworks": {
  "netstandard1.6": {
    "dependencies": {
      "NETStandard.Library": "1.6.0"
    }
  },
  "net40": {
    "frameworkAssemblies": {
      "System.Windows.Forms": {}
    }
  }
}

```

Working with `Clipboard` also requires setting the main thread as STA, so don't forget to add `[STAThread]` to `Main()` in your application.
Note: the bellow was for .NET Core < 3, which came without WinForms on Windows.

However, it is still valid if you need to compile something with WinForms on Linux, since .NET Core WinForms only runs on Windows.

Mixing frameworks is certainly one way to go - but then, why do you use .NET Core ?

But what you can do is port the mono implementation of System.Windows.Forms to NetStandard.  

Such as here:
<https://github.com/ststeiger/System.CoreFX.Forms>