(обновлено - см. Ниже)
У меня есть приложение 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увидел (что мне совсем не помогло), должен был отключить проект от создания сборки сериализации.Для этого выполните следующие действия (это может помочь, а может и не помочь, но стоит попробовать):
- В обозревателе решений щелкните правой кнопкой мыши проект, в котором произошла ошибка, и перейдите в Свойства.
- На вкладке 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 ? Другими словами, в настоящее время это невозможно.