VS2010 Ссылка на сборку между проектами не удалась

Context:

У меня есть 3 проекта в моих решениях (С#,.NET 4.0):

  • Abc.Business(проект Dll)
  • Abc.Test(тестовый проект)
  • Abc.Ui(проект Wpf)

  • Abc.Business - моя бизнес-логика. Он содержит объекты, менеджеры, службы и т.д.

  • Abc.Test имеют ссылку на проект Abc.Business и являются unit test. Они хорошо работают.
  • Abc.Ui имеют ссылку на проект Abc.Business

Abc.Ui не может разрешить все using Abc.Business; Журнал ошибок показывает:

Ошибка Тип или имя пространства имен "Бизнес" не существует в пространстве имен "Abc" (вам не хватает ссылки на сборку?) c:\Abc\Abc.Ui\ViewModels\ClientViewModel.cs

Кроме того, когда я вручную набираю using в верхней части моего файла, Intelli-sense покажет мне "Abc.Business.etc..". Таким образом, Intelli-sense walk в ссылке, но не строит.

Любые идеи?

Ответ 1

Большое спасибо Grhm и Хенк Холтерман, которые указывают мне на решение архитектуры. На самом деле это не проблема, но это заставляет меня найти ее. Проблема была в Рамочной цели. Проект Ui по умолчанию был нацелен на платформу .NET 4.0 с профилем "Клиент". Этот профиль не может ссылаться на неклиентский профиль. Я нахожу это в недостаточно используемом окне вывода отладки. (Вместо этого я привык искать в списке ошибок)

Вот что показала ошибка:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360,9): предупреждение MSB3253: ссылка на сборку "C:\Abc\Abc.Business\bin\Debug\Abc.Business.dll" не может быть разрешен, поскольку он имеет зависимость от "System.Web, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a", который не находится в целевой среде ".NETFramework, Version = v4". 0, Профиль = Client". Удалите ссылки на сборки не в целевой структуре или не рассмотрите вопрос о перенацеливании своего проекта.

Я меняю профиль на нормальный (ничего), и BOOM все работает. Здесь страница MSDN об этом

Еще раз спасибо за ваше время.

Ответ 2

У меня были такие проблемы, когда у нас были несоответствия в диспетчере конфигурации. (Доступ через меню "Сборка" ).

У нас были проекты по созданию варианта x86, некоторые из которых построили вариант x64, а менеджер конфигурации имел "платформы решений" для "Любой процессор" и "Смешанные процессоры".

Я считаю, что наш "Бизнес" был построен как библиотека x86 и наш "пользовательский интерфейс" в виде x64 (или наоборот), что означало, что он не смог найти сборку (для правильной архитектуры) и дал вам ошибку "Видя, но интеллигент все еще работал, глядя на источник.

Я бы предложил посмотреть ваши платформы проектов и платформы решений и убрать любые странности.

Ответ 3

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

Несколько советов/идей:

  • удалите ссылку и добавьте ее снова, как ссылку на проект
  • Восстановить решение и проверить сообщения об ошибках
  • check Платформа (версия). Возможно, пользовательский интерфейс является клиентской платформой, а уровень Biz использует всю платформу.

Ответ 4

Вы добавили ссылку на проект Abc.Business в проект Abc.Ui? Вы можете сделать это, щелкнув правой кнопкой мыши ссылку "Ссылки" в Abc.Ui, выбрав "Добавить ссылку" и перейдите на вкладку "Проекты". и выбрав Abc.Business.