Не удалось найти имя типа или пространства имен «IClientValidatable» — в .NET 4.7.

Я создаю приложение ASP.NET MVC с VS 2017, ориентируясь на .NET 4.7, и пытаюсь построить свои модели внутри бизнес-библиотеки, на которую ссылается веб-приложение. Поэтому я пытаюсь получить многие из тех же классов, которые по умолчанию поставляются с проектом MVC, в совершенно новую библиотеку классов.

В частности, я получаю следующую ошибку:

Ошибка

Это сильно отличается от того, что этот вопрос публиковался в прошлые разы:

  1. Не удалось найти имя типа или пространства имен "IClientValidatable"
  2. Не удалось найти имя типа или пространства имен "IClientValidatable" (вы пропустили директиву using или ссылку на сборку?)

А именно, обе они решаются простым включением оператора using для System.Web.Mvc, где IClientValidatable жив.

Но я определенно уже сделал это... Вот диспетчер ссылок для библиотеки классов с включенной ссылкой, доступной для .NET 4.7.

Диспетчер ссылок

В качестве дополнительного доказательства, вот параллельный пример того, как я могу извлечь некоторые классы из System.Web.Mvc, но не из IClientValidatable.

Рядом

Для справки, вот конфигурация самой библиотеки классов

Библиотека классов

Так этот класс куда-то переехал? Доступно ли это с .NET 4.7?


person KyleMit    schedule 02.11.2017    source источник


Ответы (1)


Таким образом, реальный вопрос, похоже, не в том, куда он делся, а в том, почему самая последняя структура ориентирована на такую ​​старую версию.

При попытке добавить ссылку на System.Web.MVC при нацеливании на .NET Framework 4.7 единственным доступным вариантом является MVC v2.0.0.0, который невероятно устарел. При заполнении нового приложения MVC оно будет поставляться с версией 5.2.3.0.

Вот Assembly Explorer с загруженными обеими библиотеками. Общие элементы будут выделены в каждом, но IClientValidatable был добавлен позже.

Обозреватель сборок

А вот Диспетчер ссылок VS 2017, где вы можете добавлять ссылки на основе вашей текущей платформы, показывая старую библиотеку MVC для новой версии .NET.

Диспетчер ссылок

Тогда возникает вопрос....

В: Как добавить ссылку, которой нет в списке сборок для моей платформы?

A: так же, как вы добавляете любую другую ссылку — вы можете перейти к dll или получить ее из nuget.

DLL Если у вас уже есть веб-приложение, есть хорошие шансы, что вы можете найти dll в каталоге существующих пакетов, например:

\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll

Если вы предпочитаете Nuget, некоторые незначительные неудобства заключаются в том, что имена пакетов nuget точно не синхронизируются с устанавливаемыми сборками, нелегко просмотреть или найти, какие сборки поставляются с какими пакетами, а также библиотеки и фреймворки часто поставляются в комплекте с другими вещами, которые могут вам не понадобиться. Все это говорит о том, что вы будете искать пакет под названием:

Microsoft.AspNet.Mvc в Nuget

Microsoft.AspNet.Mvc — пакет

Который установит следующие библиотеки:

Microsoft.AspNet.Mvc — библиотеки

person KyleMit    schedule 03.11.2017