Как использовать System.Windows.Forms в библиотеке классов.NET Core
Я создал библиотеку классов.NET Core и попробую построить ее на основе среды net40. Я хочу использовать класс Clipboard из сборки System.Windows.Forms. Как я могу это сделать?
Мой файл 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. Какие-нибудь мысли?
4 ответа
Что вам нужно "frameworkAssemblies"
, например:
"frameworks": {
"netstandard1.6": {
"dependencies": {
"NETStandard.Library": "1.6.0"
}
},
"net40": {
"frameworkAssemblies": {
"System.Windows.Forms": {}
}
}
}
Работать с Clipboard
также требует установки основного потока как STA, поэтому не забудьте добавить [STAThread]
в Main()
в вашем приложении.
Для VS2019 .NET Core 3.1:
- щелкните правой кнопкой мыши проект и выберите " Выгрузить проект".
- щелкните проект правой кнопкой мыши и выберите "Редактировать foobar.csproj"
- Пример использования WPF и Winforms в.NET Core 3.1: я добавил теги UseWPF и UseWindowsForms. Также я изменил
Microsoft.NET.Sdk
кMicrosoft.NET.Sdk.WindowsDesktop
иметь возможность использовать также wpf.
<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>
...
- сохраните и снова щелкните проект правой кнопкой мыши и выберите Reload Project
для .Net 6 файл .csproj должен содержать:
<PropertyGroup>
<TargetFramework>net6.0-windows</TargetFramework>
<UseWPF>true</UseWPF>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
Обратите внимание на « -windows » в целевой структуре.
UseWPF
является необязательным.
Смешивание фреймворков - это, безусловно, один из способов, но тогда зачем вам использовать.NET Core?
Но что вы можете сделать, это перенести моно реализацию System.Windows.Forms на NetStandard.
Например, здесь: https://github.com/ststeiger/System.CoreFX.Forms