Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在.NET核心类库中使用System.Windows.Forms_.net_.net Core_Project.json - Fatal编程技术网

如何在.NET核心类库中使用System.Windows.Forms

如何在.NET核心类库中使用System.Windows.Forms,.net,.net-core,project.json,.net,.net Core,Project.json,我已经创建了.NET核心类库,并尝试根据net40框架构建它。我想使用System.Windows.Forms程序集中的剪贴板类。我该怎么做 My project.json文件: { "version": "1.0.0-*", "dependencies": { "NETStandard.Library": "1.6.0" }, "frameworks": { "netstandard1.6": { "i

我已经创建了.NET核心类库,并尝试根据net40框架构建它。我想使用System.Windows.Forms程序集中的剪贴板类。我该怎么做

My project.json文件:

{
    "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
            }
        }
    }
}
我所有的net40特定代码都在net40定义下。有什么想法吗?

您需要的是,例如:

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

使用
Clipboard
还需要将主线程设置为STA,因此不要忘记将
[STAThread]
添加到应用程序中的
main()

注意:下面是针对.NET Core<3的,Windows上没有WinForms

但是,如果您需要在Linux上使用WinForms编译某些东西,它仍然有效,因为.NET核心WinForms仅在Windows上运行

混合框架当然是一种方法——但是,为什么要使用.NETCore呢

但您可以将System.Windows.Forms的mono实现移植到NetStandard。
例如:
对于VS2019.NET Core 3.1:

  • 在项目上单击鼠标右键,然后选择“卸载项目”
  • 在项目上单击鼠标右键并选择“编辑foobar.csproj”
  • 在.NET Core 3.1中使用WPF和Winforms的示例:我在其中添加了UseWPF和UseWindowsForms标记。另外,我将
    Microsoft.NET.Sdk
    更改为
    Microsoft.NET.Sdk.WindowsDesktop
    ,以便能够同时使用wpf
  • 
    萨克
    萨克
    萨克
    萨克
    netcoreapp3.1
    真的
    真的
    ...
    
  • 保存并再次右键单击项目,然后选择“重新加载项目”

  • 是的,你说得对。但您也可以使用.NET核心创建简单的控制台应用程序。我尝试使用复制/粘贴功能为我的需要创建自定义控制台,因此我需要从剪贴板复制数据并将其粘贴到我的控制台。因此,您必须找到另一个属于.NET Core的类才能使用剪贴板或切换到目标为“Legacy.NET”的控制台应用程序@MarcoGuignard这正是
    net40
    框架的用途。它允许您编写在.Net Core和.Net Framework上工作的库和应用程序,同时尽可能利用.Net Framework的特定功能。如何在新的配置文件格式.csproj中做到这一点?@ZEE您知道.csproj中的任何示例吗?@ZEE查看此答案谢谢。使用不带WPF的Windows窗体还需要设置
    <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
    
      <PropertyGroup Label="Globals">
        <SccProjectName>SAK</SccProjectName>
        <SccProvider>SAK</SccProvider>
        <SccAuxPath>SAK</SccAuxPath>
        <SccLocalPath>SAK</SccLocalPath>
      </PropertyGroup>
    
      <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <UseWPF>true</UseWPF>
        <UseWindowsForms>true</UseWindowsForms>
      </PropertyGroup>
    ...