Использование System.Windows в .NET Core

У меня есть проект в Visual Studio 2019, который я перехожу с .NET Framework 4.6 на .NET Core 3.1.

Я использовал руководство от Microsoft для переноса моего проекта, описано здесь . Я запустил анализатор переносимости и показал, что проект на 100% портативен.

Но все зависимости от System.Windows больше не работают. Например, я использую System.Windows.Rect. В официальной документации в нем четко указано, что он доступен для .NET Core 3.1.

Однако в коде он помечает Rect словами «Тип или имя пространства имен 'Rect' не может быть найдено (вам не хватает директивы using или ссылки на сборку?)», А вверху он отмечает мой using System.Windows серым цветом с сообщением «Директива использования не нужно ".

Эта ошибка касается многих вещей в моем коде, например System.Windows.ResourceDictionary, System.Windows.Application.Current, System.Windows.Point, ...

Поэтому по некоторым причинам кажется, что я не могу использовать System.Windows, даже если само использование работает нормально.

Я искал System.Windows в диспетчере пакетов NuGet и погуглил, но ничего не нашел.

Итак, вот мой вопрос: как я могу использовать System.Windows в проекте .NET Core 3.1 с Visual Studio 2019? На данный момент я предполагаю, что мне нужно вручную включить сборку WindowsBase.dll, но в моем установочном каталоге (C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional) я могу найти только одну в C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\Microsoft\LiveShare\Agent, и она не кажется правильной.


person izlin    schedule 20.04.2020    source источник
comment
В вашем файле .proj вы используете <Project Sdk="Microsoft.NET.Sdk"> или <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">?   -  person Rosdi Kasim    schedule 20.04.2020
comment
Вы установили свойство UseWPF=true в csproj файле?   -  person Pavel Anikhouski    schedule 20.04.2020
comment
@RosdiKasim Я использую настройки по умолчанию с <Project Sdk="Microsoft.NET.Sdk">.   -  person izlin    schedule 20.04.2020
comment
@PavelAnikhouski Я не установил UseWPF в моем файле csproj, поэтому он по-прежнему используется по умолчанию.   -  person izlin    schedule 20.04.2020
comment
Что касается графики Point и Rect, Microsoft выпустила System.Drawing.Common, чтобы обеспечить кроссплатформенный доступ к графическим функциям GDI +. Вы можете установить System.Drawing.Common через NuGet. Проверьте, установили ли вы эту библиотеку.   -  person Goodies    schedule 20.04.2020
comment
Ну ... а ты пробовал поменять его на Microsoft.NET.Sdk.WindowsDesktop и пересобрать?   -  person Rosdi Kasim    schedule 20.04.2020


Ответы (2)


Основываясь на вашем описании, вы хотели бы использовать System.Windows.Rect в .NET Core 3.1.

проект с Visual Studio 2019. Я нашел решение, и вы можете попробовать следующие шаги.

Во-первых, нам нужно создать консольное приложение .net core 3.1.

Во-вторых, нам нужно установить свойство UseWPF=true в csproj file.

 <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
         <UseWPF>true</UseWPF>
  </PropertyGroup>

В-третьих, нам нужно установить пакет nuget System.Runtime.WindowsRuntime.

В-четвертых, перестройте приложение и напишите следующий код.

using Windows.Foundation;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Rect myRect1 = new Rect();
            myRect1.X = 10;
            myRect1.Y = 100;
            myRect1.Width = 150;
            myRect1.Height = 100;

        }
    }
}

Кроме того, если вы хотите использовать system.windows в .net core 3.1, я предлагаю вам использовать WPF

.net core 3.1 приложение.

person Jack J Jun - MSFT    schedule 21.04.2020
comment
Этот подход не рекомендуется вашим работодателем Microsoft. Правильный вариант - создать проект WPF .NET Core, запустив dotnet new wpf. - person Lex Li; 23.04.2020

Вот как это сделать с net5.0:

 <PropertyGroup>
    <TargetFramework>net5.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
  </PropertyGroup>
person Daniel Fisher lennybacon    schedule 04.06.2021