Пространство имен не распознано (хотя оно и есть) - PullRequest
134 голосов
/ 19 ноября 2010

Я получаю эту ошибку:

Не удалось найти тип или имя пространства имен 'AutoMapper' (отсутствует директива using или ссылка на сборку?)

Самое смешное, что в моем проекте уже есть ссылка:

ProjectThatFails

А это мой код:

using System.Collections.Generic;
using DataContract;
using SelectorDAL;
using AutoMapper;

namespace SpecimenSelect
{
    public class SpecimenSelect : ISpecimenSelect
    {
        public SpecimenSelect()
        {
            SetupMaps();
        }

        private static void SetupMaps()
        {
            Mapper.CreateMap<SpecimenDetail, SpecimenDetailContract>();
        }

Другая странная вещь заключается в том, что в моем решении есть два других проекта, которые оба используют AutoMapper и ссылаются на один и тот же файл AutoMapper.dll. Они оба работают отлично.

Вот снимок экрана одного:

ProjectThatWorks

и вот этот код (который прекрасно компилируется):

using System.Collections.Generic;
using AutoMapper;
using DataContract;
using SelectorDAL;

namespace PatientSelect
{

    public class PatientSelect : IPatientSelect
    {
        public PatientSelect()
        {
            SetupMaps();
        }

        private void SetupMaps()
        {
            Mapper.CreateMap<Patient, PatientContract>();
            Mapper.CreateMap<OrderedTest, OrderedTestsContract>();
            Mapper.CreateMap<Gender, GenderContract>();
        }

Кажется, что обе ссылки имеют одинаковые данные на странице свойств.

Чего мне не хватает?

Я пытался:

  1. Перезапуск Visual Studio
  2. Ссылка без использования оператора (т.е. AutoMapper.Mapper.CreateMap)
  3. Очистить и восстановить

Есть еще идеи?

Ответы [ 14 ]

247 голосов
/ 19 ноября 2010

Убедитесь, что ваш проект не настроен на использование клиентского профиля .NET Framework 4.

Вы можете проверить / изменить это, щелкнув правой кнопкой мыши свой проект (не решение), выбрав Свойства -> Приложение -> Целевая структура . Целевая структура - это выпадающий список на этой странице.

Это проблема в Visual Studio (я бы даже сказал, что это ошибка). Для AutoMapper требуются сборки, которые исключены из клиентского профиля .NET Framework 4. Поскольку ваш проект использует эту версию фреймворка, он ломается.

Аналогичная ошибка будет распространяться на процесс сборки, когда версия .NET Framework для проекта, на который вы ссылаетесь, выше, чем проект, на который делается ссылка. то есть проект с таргетингом на 4.5, который ссылается на проект с таргетингом на 4.5.1, выдаст вам ту же ошибку.

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

27 голосов
/ 19 ноября 2010

Позвольте мне задать глупый вопрос: может ли быть два automapper.dll файла?Один с AutoMapper пространством имен, а другой без?Подтвердите пути в обоих проектах.

Я также заметил, что порядок команд using отличается.Это не должно иметь значения, но вы пытались их перетасовать?

17 голосов
/ 18 февраля 2013

Если ваш класс не компилируется, даже если он находится в проекте, проверьте следующее:

  1. является ли имя класса точно таким же
  2. является ли пространство имен точно таким же
  3. показывают ли свойства класса действие сборки = compile
8 голосов
/ 14 февраля 2018

Я решил эту проблему, щелкнув правой кнопкой мыши папку с файлами и выбрав Исключить из проекта , а затем снова щелкнув правой кнопкой мыши и выбрав Включить в проект (сначала необходимо включить 1005 * Показать все файлы , чтобы сделать исключенную папку видимой)

7 голосов
/ 22 мая 2012

У меня похожая проблема с ссылками, которые не были распознаны в VS2010, и ответы здесь не смогли исправить это.

Проблема в моем решении была связана с расширением пути, по которому находился упомянутый проект.Работая с SVN, я сделал ветку репозитория для некоторого тестирования, и эта ветвь увеличила два уровня в структуре пути, поэтому путь стал слишком длинным, чтобы его можно было использовать в Windows.Это не выдавало никакой ошибки, но не распознавало пространство имен ссылки на проект.Когда я исправил расположение проекта, чтобы путь был меньше, все прошло нормально.

5 голосов
/ 26 августа 2013

В моем случае упомянутая dll была собрана в более позднюю версию .Net Framework.После того, как я добавил ссылку, я мог ее использовать.Но как только я выполнил сборку, появится ошибка «отсутствует ссылка».Я обновляю dll, ошибка будет идти, но это никогда не будет строить.Этот пост заставил меня проверить версию фреймворка, и, таким образом, я смог решить ее, создав ссылочный проект в той же версии.

3 голосов
/ 29 августа 2018

Это должно быть самое простое решение, если все остальные ответы вам не помогут

Я искал что-то не так с моей настройкой среди ответов, перепробовал все из них - ни один не работал, потом я понял, Visual Studio 2018 был разработан Microsoft . Поэтому я сделал то, что делает большинство людей,

Перезапущенная Visual Studio И это сработало

3 голосов
/ 18 октября 2013

Вопрос уже был задан, но есть еще не описанные дополнительные детали, которые необходимо проверить.

У меня тоже было такое поведение, когда проект B упоминался в проекте A, но пространство имен проекта B не было распознано в проекте A. После некоторого поиска я обнаружил, что мой путь слишком длинный. Благодаря сокращению пути проектов (как A, так и B) ссылки стали видимыми и доступными.

Я проверил эту теорию, создав проект C на гораздо меньшей глубине пути. Я ссылался на проект C в проекте A. Ссылки работали правильно, как и ожидалось. Затем я удалил проект C из решения, просто переместил проект C в глубокий путь, такой же, как проект B, и добавил проект C обратно в решение, и попытался скомпилировать. Тогда я больше не мог проецировать объекты C.

3 голосов
/ 19 ноября 2010

Возможно, таблица типов проекта находится в неверном состоянии. Я попытался бы удалить / добавить ссылку, и если это не сработало, создайте другой проект, импортируйте мой код и посмотрите, работает ли это.

Я столкнулся с этим при использовании VS 2005, можно было бы ожидать, что MS решит эту конкретную проблему к настоящему времени, хотя ..

2 голосов
/ 03 сентября 2016

В моем случае я скопировал библиотеку классов и не изменил «Имя сборки» в свойствах проекта, поэтому одна DLL перезаписывала другую ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...