Пакет NuGet (.NET Standard 2.x) нарушает работу приложения ASP.NET MVC5 (полный каркас .NET) - PullRequest
0 голосов
/ 10 мая 2018

(обновлено - см. Ниже)

У меня есть приложение ASP.NET MVC5 (несколько сборок), все обращающиеся к .NET Full Framework 4.7.1

Я недавно добавил (приватный)Пакет NuGet, созданный нами с использованием .NET Standard 2. От Быстрый старт: создание и публикация пакета с использованием Visual Studio (.NET Framework) :

Если у вас нет причин выбиратьв противном случае .NET Standard является предпочтительной целью для пакетов NuGet, поскольку он обеспечивает совместимость с самым широким спектром потребляющих проектов.

С тех пор все просто не было одинаково ..... есть список ошибок, которые я упоминаю ниже, но я подозреваю, что все они являются симптомами одной и той же проблемы (обсужденов конце).

Обратите внимание : я использую Visual Studio 15.7.1, и все пакеты NuGet используют формат управления package.config, а не PackageReference.

Первая проблема

Метод не найден: 'System.Collections.ObjectModel.Collection`1 System.Web.Http.HttpConfiguration.get_MessageHandlers ()'

Я предполагаю, что есть версия .NET Standard System.Web.Http, у которой нет этого метода, и мое приложение решило эту проблему, а не 4.7.1.

Я частично исправил это, добавив следующее в мой файл web.config:

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>

Я говорю «частично» исправил это, это исправляет проблему при запуске в моей среде DEV (сVisual Studio), но при публикации в нашей среде контроля качествае остается.Любые идеи о том, как это исправить?

Примечание : Ссылка проекта MVC на System.Net.Http существует по следующему пути (это НЕ пакет NuGet):

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ Microsoft \ Microsoft.NET.Build.Extensions \ net471 \ lib \ System.Net.Http.dll

Вторая проблема Две из сборок занимаются извлечением данных из различных веб-источников (WCF, web-api, веб-сервис).При компиляции в режиме RELEASE (где у меня включен анализ кода и т. Д.), Я получаю следующую ошибку:

Была предпринята попытка загрузить сборку с неверным форматом: C: \ Program Files(x86) \ Справочные сборки \ Microsoft \ Framework.NETFramework \ v4.7.1 \ Facades \ System.IO.Compression.ZipFile.dll.{Имя сборки} {Путь к сборке} \ SGEN

Я нашел одну запись , у которой было следующее предложение:

Другое предложение Iувидел (что мне совсем не помогло), должен был отключить проект от создания сборки сериализации.Для этого выполните следующие действия (это может помочь, а может и не помочь, но стоит попробовать):

  1. В обозревателе решений щелкните правой кнопкой мыши проект, в котором произошла ошибка, и перейдите в Свойства.
  2. На вкладке Build прокрутите до самого низа и установите для параметра Generate Serialization Assembly значение Off

Я пробовал это, и да, это сработало для меня.Однако это два проекта, которые сериализуют объекты для отправки в эти различные веб-источники, поэтому последнее, что я хочу сделать, это неоптимизировать сериализацию в моем приложении ...

Любые предложения относительно того, что можетбыть неправым, или как мне лучше поступить?

ОБНОВЛЕНИЕ 14-мая-2018 Я нашел отличную статью от Scot Hanselman относительно пакетов NuGet, в которой говорится:

Как мудро говорит Орен:

«Использование .NET Standard требует от вас использования PackageReference, чтобы устранить боль« большого количества пакетов », а также правильно обрабатывать переходные зависимости.возможность использовать .NET Standard без PackageReference, я бы не советовал. "

However, есть подвох .... В Visual Studio теперь есть простой способ перенести сборку из более старого package.config в PackageReference, как подробно описано в этой ссылке , но в этой статье четко говорится:

Обратите внимание, что в настоящее время переносчик не поддерживает проекты C ++, JavaScript и ASP.NET (.NET Framework).

И при попытке этого инструмент миграции должным образом уведомил меня, что для пакетов NuGet Microsoft.AspNet.Mvc и Microsoft.AspNet.WebPages:

активы контента недоступны, когда пакет установлен после миграции

ОБНОВЛЕНИЕ 23 мая-2018 Я обнаружил, что у некоторых других людей возникает похожая проблема. Из GitHub: .NET 4.6.1 / .NET Standard 2.0 сборка с SGen завершается ошибкой # 1630 . Их «решением» было снова отключить сериализацию (см. Выше), что ухудшило производительность моего приложения.

Выкл

Заключение

Итак, я прав, заключая, что для использования пакета NuGet .NET Standard 2.x в приложении .NET FullFramework мне нужно использовать PackageReference, а не package.config, и в настоящее время это невозможно в приложениях AspNet.MVC ? Другими словами, в настоящее время это невозможно.

...