Почему я не могу ссылаться на сборку .Net Core 1.0 в приложении Windows Universal? - PullRequest
0 голосов
/ 28 ноября 2018

Я использую Visual Studio 2017 Community Edition дома и пытаюсь создать свое первое универсальное приложение для Windows.Решение состоит из двух сборок: одна для пользовательского интерфейса, а другая чисто вычислительная.Все хорошо, пока я не попытаюсь сослаться на вычислительную сборку из сборки пользовательского интерфейса.Он отказывается добавлять ссылку.Сначала, исходя из моего чтения, я подумал, что это связано с несовместимостью целевой версии, но даже если я сделаю цель вычислений максимально низкой, а цель пользовательского интерфейса - максимально высокой, это не имеет значения.

  • Вычислительная сборка представляет собой библиотеку классов C #, предназначенную для .Net Core 1.0 .

  • Сборка пользовательского интерфейса - универсальная версия Windows, для целевой версии min установлено либо:

    • "Windows 10 FallОбновление создателей (10.0; сборка 16299 ) " или
    • " Windows 10 (10.0; сборка 10240 ) "

В любом случае результат одинаков.Когда я иду Проекты> Добавить ссылку ...> Проекты / Решение > выберите other_assembly и нажмите OK , он просто говорит

"Невозможно добавить ссылку на проект" other_assembly "."

Без объяснения, без подробностей.

Что здесь препятствие?Как мне обойти это или хотя бы получить подробное описание ошибки?

Если я скопирую все исходные файлы расчета в сборку пользовательского интерфейса, все будет в порядке, но я хочу иметь возможностьдля поддержки более чем одной платформы.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Таким образом, когда мы создаем кроссплатформенную (например, используемую в системах Linux) библиотеку классов в VS2017, у нас есть два варианта: один нацелен на .NET Core, другой нацелен на .NET Standard.

Хотя .NET Core и .NET Standard существуют уже несколько лет, они по-прежнему сбивают с толку большинство из нас.К счастью, у нас есть много ссылок для чтения в Интернете.Вы можете зайти в Google или просто найти ответы с наибольшим количеством голосов в Stackoverflow.

Я хотел бы поделиться своим опытом по изучению этого.Я полностью понимаю это только после того, как начал писать приложения .NET Core в своей системе Ubuntu.

.NET Core о том, что приложение может работать на нескольких платформах , так что у вас есть консольное приложение .NET Core или приложение ASP.NET Core, вы можете запустить приложение с одной и той же командой " dotnet run " в Windows или Ubuntu без необходимости изменять одну строкукода.

. В настоящее время .NET Core поддерживает только два типа проектов: Console и ASP.NET Core.UWP по-прежнему строго только для Windows, вы не можете написать приложение UWP и ожидать, что оно будет работать на других ОС, кроме Windows.

С другой стороны, .NET Standard - это разделение кода библиотеки классов между различными приложениями .NET - Windows Forms, WPF, UWP, Mono, ASP.NET Core и т. Д.это тип проекта. Потому что все они должны реализовать какую-то версию .NET Standard.Это означает, что если библиотека скомпилирована для действительно низкой версии .NET Standard (например, 1.0), то на библиотеку могут ссылаться все, да, даже WinForms (.NET Platform 4.5 или выше).

Итак, давайте вернемся к вопросу: если вы скомпилируете библиотеку классов для целевой платформы .NET Core, то она может использоваться только приложением .NET Core, приложение UWP не может ссылаться на нее, потому что UWP не является кроссплатформенным (UWP работает только на нескольких экранах и работает на разных устройствах Windows 10 с различными размерами экрана;))

Обновление через месяц : когда я писал этот ответ, я никогда не слышал о MSпланируем выпустить .NET Core 3.0 в 2019 году - они добавят поддержку WinForms и WPF в следующую основную версию .NET Core, что означает мою точку # 1 .NETСуть в том, что приложение кроссплатформенное будет несколько вводить в заблуждение.

0 голосов
/ 29 ноября 2018

Пожалуйста, проверьте следующий скриншот, UWP является подмножеством .NET Core.Он также имеет ряд API, уникальных для UWP.Приложения UWP могут быть основными приложениями .NET, но обратное не обязательно верно.Не все основные приложения .NET являются приложениями UWP.UWP предназначен только для экосистемы Windows.

enter image description here

Как сказал @ magicandre1981, лучший способ состоит в том, чтобы портировать библиотеку классов .netcore на .net стандарт 2.0, которыйможно использовать целевую версию uwp min до 16299. Стандарт .net см. в этом документе .

.
...