我正在尝试创建一个 .net core 3 类库,它引用了 .net core 3 版本的 winform(这样该程序集本身就可以被 .net core 3 WinForm 程序集引用)。
一个新的 .net core WinForm 项目引用了 Microsoft.WindowsDesktop.App.WindowsForms,但我找不到任何名为该名称的 nuget 包。
我需要做什么才能引用 .net core 3 的 winform?
我正在尝试创建一个 .net core 3 类库,它引用了 .net core 3 版本的 winform(这样该程序集本身就可以被 .net core 3 WinForm 程序集引用)。
一个新的 .net core WinForm 项目引用了 Microsoft.WindowsDesktop.App.WindowsForms,但我找不到任何名为该名称的 nuget 包。
我需要做什么才能引用 .net core 3 的 winform?
更新:在较新的VS 2019版本中(我试过版本16.8.2),已经为.NET Core提供了Windows Forms Control Library项目模板。
目前Windows Forms .NET Core处于预览模式,我不知道在VS 2019 16.2.2中是否有任何官方Nuget包或Windows Forms Control Library项目模板。
但是,您可以使用以下说明来创建Windows Forms Control Library:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<UseWindowsForms>true</UseWindowsForms>
来指定Windows Forms作为UI技术。现在,项目文件应如下所示:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>Library</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
</Project>
现在,您可以向此项目添加Windows表单元素,如 Form
或 UserControl
,并且可以毫无问题地构建该项目。
我有一个核心 3.1 的 web 应用程序,引用了一个依赖于 System.Windows.Forms 的 Framework 4.5.2 项目。对我来说,解决方法是在 Web 应用程序的 csproj 文件中添加以下行:
FrameworkReference Include="Microsoft.WindowsDesktop.App.WindowsForms"
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFrameworks>netcoreapp3.1</TargetFrameworks>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.WindowsDesktop.App.WindowsForms" />
</ItemGroup>
</Project>
目前被认可的答案似乎有点过时。最新的语法要求在TargetFramework标记中指定目标,而不是在Sdk标记中指定:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Library</OutputType>
<TargetFramework>net5.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
</Project>
更多信息请参见此处
或者,您可以添加一个新的Windows Form类型项目,然后将输出类型设置为库。
<OutputType>Library</OutputType>
对于我来说,在我的项目中,我需要使用net5以下内容
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>