Ссылка на библиотеку DLL .NET 3.5 из проекта ASP.NET Core

У меня есть DLL, скомпилированная под .NET 3.5, которая представляет собой модель данных POCO. Клиентское приложение ограничено .NET 3.5, а библиотека DLL должна совместно использоваться как клиентом, так и сервером, поэтому повторная компиляция библиотеки DLL невозможна.

Я пытаюсь переписать серверный REST API как проект ASP.NET Core MVC (используя выпуск 1.0 и инструменты Preview 2 в VS2015). Я попытался обновить project.json с помощью так называемого «синтаксиса bin», как показано ниже, но журнал восстановления пакетов показывает кучу ошибок, таких как:

ошибка: пакет Microsoft.NETCore.App 1.0.0 несовместим с net35 (.NETFramework, версия = v3.5). Пакет Microsoft.NETCore.App 1.0.0 поддерживает: netcoreapp1.0 (.NETCoreApp, Version=v1.0)

"frameworks": {
"netcoreapp1.0": {
    "imports": [ "dotnet5.6", "portable-net45+win8" ]
},
"net35": {
    "bin": { "assembly": "c:\\source\\externaldllsdebug\\datadef.dll" }
}

Я также попытался настроить пакет nuget в папке DLL, а затем сделать папку новым источником nuget. Он нормально открыл пакет, но не смог импортировать библиотеки DLL.


person McGuireV10    schedule 15.07.2016    source источник
comment
Я бы попробовал настроить таргетинг на net451+ и скрестил бы пальцы :)   -  person Pawel    schedule 16.07.2016


Ответы (1)


Я не думаю, что то, что вы пытаетесь сделать, возможно в настоящее время.

Альтернативным решением может быть рефакторинг проекта, создающего общую DLL, для создания библиотеки, совместимой как с .NET 3.5, так и с netcoreapp1.0:

"frameworks": {
    "net35": { },
    "netstandard1.1": {
        "dependencies": {
            "NETStandard.Library": "1.6.0"
        }
    }
}

Таким образом, вы можете создать библиотеку DLL, которая по-прежнему будет работать в вашем проекте .NET 3.5, а также такую, которую можно будет установить в вашем проекте ASP.NET Core без каких-либо проблем или взломов.

person Nate Barbettini    schedule 15.07.2016
comment
Как вы, наверное, знаете, это создает две библиотеки DLL. Хотя это проще, чем поддерживать два проекта, как вы заметили, это не совсем то, на что я надеялся, но я ценю это предложение. Я полагаю, что это правильный подход, если я хочу использовать угол пакета NuGet. - person McGuireV10; 16.07.2016
comment
@ McGuireV10 Да, он создает две библиотеки DLL. Но если вы упаковываете его через NuGet, в проекте будет установлен только один. - person Nate Barbettini; 16.07.2016
comment
Я воздам вам должное за ответ. После дополнительных поисков оказалось, что DLL не такая ванильная, как мне казалось, поэтому она не будет совместима с Core без некоторых альтернативных объявлений зависимостей (по сравнению с mscorlib на стороне 3.5), поэтому гимнастика NuGet неизбежна. - person McGuireV10; 16.07.2016
comment
@McGuireV10 McGuireV10 Я уверен, что вы уже видели это, но с помощью dotnet pack очень легко создавать многоцелевые пакеты NuGet. Если у вас есть определение проекта, подобное приведенному выше, команда pack выведет файл NuGet, который установит правильную DLL (+ зависимости) в обоих типах проектов. - person Nate Barbettini; 17.07.2016
comment
Не существует профиля netstandard или pcl, предназначенного для версии 3.5, поэтому лучшим выбором будет создание двух сборок. - person Richard Szalay; 17.07.2016
comment
@NateBarbettini Спасибо, я использовал графический интерфейс NuGet для создания пакета (на самом деле он включает около шести DLL), но это приводит к несоответствию между новым пакетом и тем, что NuGet кэширует в глобальных пакетах, что требует от меня уничтожения этот кеш, чтобы подобрать правильные версии в ссылающемся проекте. Я подозреваю, что делаю что-то не так, но у меня не было времени, чтобы попытаться исследовать это дальше. - person McGuireV10; 18.07.2016
comment
@ McGuireV10 Вы должны быть в состоянии избежать этого, всегда увеличивая версию пакета. - person Nate Barbettini; 18.07.2016
comment
@NateBarbettini Я так и предполагал, но я предполагаю, что тогда я соберу кучу ненужных пакетов старой версии в кеше, не так ли? Или NuGet достаточно умен, чтобы поддерживать порядок в кеше? (Очевидно, я не проводил никакого тестирования. До этого никогда не было особой потребности в NuGet, за исключением случайного обновления EF или чего-то еще.) - person McGuireV10; 20.07.2016
comment
@ McGuireV10 Возможно, но если у вас очень мало места на диске, я не думаю, что это будет проблемой. - person Nate Barbettini; 20.07.2016
comment
@NateBarbettini, так как же мне создать две библиотеки? ответ выше мне не понятен - person flexxxit; 16.02.2017
comment
@flexxxit Вероятно, вы ищете dotnet pack. Не стесняйтесь открывать новый вопрос, если у вас возникли проблемы с созданием пакета. - person Nate Barbettini; 16.02.2017