Ссылка на тип «IListSource» утверждает, что он определен в «Системе», но не может быть найден

Я пытаюсь добавить свой пакет, в котором целевая структура .Net Framework 4.5 уже добавила Microsoft.NETCore.Portable.Compatibility": "1.0.1", чтобы исправить ошибка mscorlib

Ниже представлен проект.json

"dependencies": {
    "Microsoft.ApplicationInsights.AspNetCore": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.1",
    "Microsoft.AspNetCore.Routing": "1.0.1",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Swashbuckle": "6.0.0-beta902",
    "Microsoft.AspNetCore.Cors": "1.1.0",
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1",
    "Microsoft.EntityFrameworkCore": "1.0.0",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0"
},

"tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
},

"frameworks": {
    "netcoreapp1.0": {
        "dependencies": {
            "Microsoft.NETCore.App": {
                "version": "1.0.1",
                "type": "platform"
            },
            "Clemittance.Database.ReadModel": "1.9.5"
        },
        "imports": [
            "dotnet5.6",
            "portable-net45+win8",
            "net45",
            "dnxcore50"
        ]
    }
},

Clemittance.Database.ReadModel моя посылка

Ошибка введите здесь описание изображения

введите здесь описание изображения


person jayvee    schedule 27.02.2017    source источник
comment
он действительно находится в System.dll, но в пространстве имен System.ComponentModel. добавьте using System.ComponentModel; в файл.   -  person Nkosi    schedule 27.02.2017
comment
@Nkosi Это уже добавлено, но все та же ошибка   -  person jayvee    schedule 27.02.2017
comment
Согласно packagesearch, он находится в пакете System.ComponentModel.TypeConverter, packagesearch.azurewebsites.net/?q=IListSource. Также удалите net45, вы не должны злоупотреблять этим.   -  person Tseng    schedule 27.02.2017
comment
@Tseng Когда я удаляю net45, вывод говорит Package Clemittance.Database.ReadModel 1.9.5 is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package Clemittance.Database.ReadModel 1.9.5 supports: net45 (.NETFramework,Version=v4.5)   -  person jayvee    schedule 27.02.2017
comment
@jayvee: Это правильно. Вы не можете использовать библиотеки, предназначенные для .NET 4.5, с .NET Core. Автоматического конвертера нет. Если вы должны использовать библиотеки, для которых требуется .NET 4.5, вы также должны ориентироваться на net451 вместо netcoreapp1.x. Помещение net451 в import заставит nuget восстановить пакет, но не более того. Он не преобразует ваш код в .NET Core/NET Standard.   -  person Tseng    schedule 27.02.2017
comment
@Tseng хорошо, я понял. Я просто отмечу ваш ответ. Спасибо. Но совместим ли .NET Framework 4.5 с linux? или это только для винды?   -  person jayvee    schedule 27.02.2017
comment
Ну, .NET Framework 4.5 — это только окна, это старая монолитная среда/среда выполнения. Возможно, вы сможете запустить его в Linux с моно (вы по-прежнему нацелены на net451), но это зависит от используемого API, поскольку не все API портированы напрямую в моно (т. е. шифрование отличается, некоторые пространства имен отличаются, WCF, WPF и т. д. (см. mono-project.com/docs/about-mono/compatibility о том, что поддерживается/перенесено в Mono)   -  person Tseng    schedule 27.02.2017


Ответы (1)


Во-первых, удалите net45 из раздела импорта, вы не должны злоупотреблять этим. Здесь вам разрешено использовать только совместимые с .NET Core фреймворки, такие как portable-net45+win8, которые, как известно, работают с .NET Core, поскольку они используют одну и ту же поверхность API.

НИКОГДА не используйте imports таким образом. Он нужен только для того, чтобы заставить nuget восстановить определенные пакеты nuget, которые еще не нацелены на netstandard1.x, например некоторые переносимые библиотеки классов (PCL).

Злоупотреблять этим для чего-либо еще просто не получится. Вы не можете заставить библиотеки .NET Framework 4.x автоматически работать с .NET Core.

IListSource кажется частью .NET Core, но не входит в состав «основных» пакетов .NET Core. Однако packagesearch говорит, что он находится в пакете SystemSystem.ComponentModel.TypeConverter (см. http://packagesearch.azurewebsites.net/?q=IListSource).

person Tseng    schedule 27.02.2017