Попытка установить EF Core с помощью таргетинга на переносимую библиотеку классов .Net 4.6.1

entity-framework entity-framework-core portable-class-library

Вопрос

Это мой первый эксперимент с библиотеками EF Core, ASP Net Core и Portable Class с VS2015. Справедливо сказать, что я расстраиваюсь.

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

Использование шаблона проекта, где я нацелен на .NET 4.6 и ASP Net Core ...

Цели

Я получаю проект с классом и файлом project.json следующим образом:

{
    "supports": {
        "net46.app": {},
        "dnxcore50.app": {}
    },
    "dependencies": {
        "Microsoft.NETCore": "5.0.0",
        "Microsoft.NETCore.Portable.Compatibility": "1.0.0"
    },
    "frameworks": {
        "dotnet": {
            "imports": "portable-net452"
        }
    }
}

Теперь, когда я устанавливаю пакет EntityFramework.Core из nuget ...

Установите EF Core Nuget

... Я получаю следующий вывод:

Restoring packages for 'Acme.PCLEFClassLib'.
Restoring packages for K:\TFS\TestApps\Projects\DotNetCore\Acme.PCL1\Acme.PCL1\project.json...
Detected package downgrade: System.Reflection from 4.1.0-beta-23225 to 4.0.10 
 Acme.PCLEFClassLib (>= 1.0.0) -> EntityFramework.Core (>= 7.0.0-rc1-final) -> Microsoft.Extensions.DependencyInjection.Abstractions (>= 1.0.0-rc1-final) -> System.Reflection (>= 4.1.0-beta-23225) 
 Acme.PCLEFClassLib (>= 1.0.0) -> EntityFramework.Core (>= 7.0.0-rc1-final) -> System.Reflection (>= 4.0.10)
Detected package downgrade: System.Reflection from 4.1.0-beta-23225 to 4.0.10 
 Acme.PCLEFClassLib (>= 1.0.0) -> EntityFramework.Core (>= 7.0.0-rc1-final) -> Microsoft.Extensions.Logging.Abstractions (>= 1.0.0-rc1-final) -> System.Reflection (>= 4.1.0-beta-23225) 
 Acme.PCLEFClassLib (>= 1.0.0) -> EntityFramework.Core (>= 7.0.0-rc1-final) -> System.Reflection (>= 4.0.10)
Version conflict detected for System.Collections. 
 Acme.PCLEFClassLib (>= 1.0.0) -> EntityFramework.Core (>= 7.0.0-rc1-final) -> System.Collections (>= 4.0.11-beta-23516) 
 Acme.PCLEFClassLib (>= 1.0.0) -> Microsoft.NETCore.Portable.Compatibility (>= 1.0.0) -> Microsoft.NETCore.Runtime (>= 1.0.0) -> Microsoft.NETCore.Runtime.CoreCLR-x86 (>= 1.0.0) -> System.Collections (= 4.0.10).
EntityFramework.Core 7.0.0-rc1-final is not compatible with .NETPlatform,Version=v5.0.
Some packages are not compatible with .NETPlatform,Version=v5.0.
Ix-Async 1.2.5 is not compatible with DNXCore,Version=v5.0.
Remotion.Linq 2.0.1 is not compatible with DNXCore,Version=v5.0.
Some packages are not compatible with DNXCore,Version=v5.0.
Ix-Async 1.2.5 is not compatible with DNXCore,Version=v5.0 (win7-x86).
Remotion.Linq 2.0.1 is not compatible with DNXCore,Version=v5.0 (win7-x86).
Some packages are not compatible with DNXCore,Version=v5.0 (win7-x86).
Ix-Async 1.2.5 is not compatible with DNXCore,Version=v5.0 (win7-x64).
Remotion.Linq 2.0.1 is not compatible with DNXCore,Version=v5.0 (win7-x64).
Some packages are not compatible with DNXCore,Version=v5.0 (win7-x64).
Package restore failed for 'Acme.PCLEFClassLib'.
Package restore failed. Rolling back package changes for 'Acme.PCLEFClassLib'.
========== Finished ==========

Возможно ли установить EF Core в портативную библиотеку классов? Если да, то как - что мне нужно сделать с проектом?

Я просто чувствую, что собираюсь кругом искать решения на линии.

ОБНОВЛЕНИЕ 1

Пробовал установку EntityFramework.MicrosoftSqlServer в моем PCL.

Учитывая, что EntityFramework.MicrosoftSqlServer устанавливается при создании стандартного проекта ASP Net Core, который использует структуру dnxcore50. Почему, если я делаю подобное в PCL, жалуется, что:

EntityFramework.MicrosoftSqlServer 7.0.0-rc1-final is not compatible with .NETPlatform,Version=v5.0.

Если это так, то как он устанавливается в проект ASP NET Core.

ОБНОВЛЕНИЕ 2

Я создал новый PCL-таргетинг .NET 4.5.1. Затем я установил EntityFramework.MicrosoftSqlServer 7.0.0-rc1-final в него через Nuget и не установил никаких проблем. Хотя я не могу повторить это сейчас. Я только что создал отдельное решение с проектом библиотеки PCL, ориентированным на ASP NET Core и .NET 4.5.1. Теперь вы получите следующее:

Attempting to gather dependency information for package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final' with respect to project 'AnotherPCLEFFUP', targeting '.NETPortable,Version=v4.5,Profile=Profile75'
Attempting to resolve dependencies for package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final' with DependencyBehavior 'Lowest'
Resolving actions to install package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final'
Resolved actions to install package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final'
Install failed. Rolling back...
Package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final' does not exist in project 'AnotherPCLEFFUP'
Package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final' does not exist in folder 'K:\TFS\TestApps\Projects\DotNetCore\AnotherPCLEFFUP\packages'
Invalid portable frameworks.

То же самое происходит при установке EntityFramework.Core.7.0.0-rc1-final.

Справедливо сказать, это совершенно расстраивает. Может быть, я лаяю неправильное дерево или просто лая с ума сегодня.

Популярные ответы

Я не знаю, как это будет работать для ваших потребностей портативного класса, но для обычных .NET (4.6 или т. Д.) Я обнаружил следующее. (см. rant ниже)

Поэтому я не знаю, является ли это «кошерным» или нет, но этот источник работает прямо сейчас:

Добавить источник пакета nuget (Опции - Источники пакетов - Добавить (плюс)

Если вы устанавливаете для SqlServer, просто установите это:

Microsoft.EntityFrameworkCore.SqlServer

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

* [begin-rant] Это было только путем обсуждения в дискуссиях EF github. Совершенно непростительно, что у них нет практического описания, объясняющего, что делать прямо сейчас. Они должны вытащить версию «RC» 1 со всеми ее ошибками и с ее радикальным дизайном от того, над чем они работают сейчас, и которые не обновлялись более 5 месяцев (! И это с «pre» -release 'mark checked!), полностью из nuget.

Позвольте мне добавить: я люблю все, что делают эти ребята, мне нравятся новые битки, много действительно хороших вещей. Но мы не должны оставаться навешенными на полгода с предположительно и по- прежнему отмеченными как релиз «RC», когда он полон ошибок, которые уже исправлены в радикально переработанной версии rc2, которую они не опубликовали. [/ Конец декламация] *



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow