У меня есть решение, в котором Project2 ссылается на Project1. Ссылка указывает на Project1.dll в папке bin Project1.

Я добавил новый класс Class1 в Project1 и использовал его в Class2 в Project2. Когда я зарегистрировался и построил, у меня возникла ошибка при разрешении пространства имен для Class1 из Class2 (там был правильный оператор using). Я добавил свою локальную папку bin в систему управления версиями, и сборка прошла успешно.

Это может быть не совсем так, но я понимаю, что папка bin содержит выходные данные сборки после ее компиляции, поэтому dll для Project1 с новым классом должна быть собрана до Project2, позволяя Class2 разрешать Class1. Понятно, что я хоть немного ошибаюсь.

Может кто-нибудь объяснить, почему сборка и ссылка вели себя именно так?

1
allie 18 Фев 2016 в 21:50

2 ответа

Лучший ответ

Вероятно, ссылка из Project2-> Project1 - это ссылка на двоичный файл, тогда как она должна быть ссылкой на проект.

Когда вы добавляете ссылку из Project2 в Project1, выберите «Проекты» в «Диспетчере ссылок», а не «Обзор». Затем выберите проект, на который вы хотите сослаться (Project1).

Вы можете определить, является ли это ссылкой на проект или нет, просмотрев файл проекта. Если это Reference, это просто ссылка (которая требует наличия библиотеки DLL). Если это ProjectReference, он правильно настроен как Ссылка на проект.

6
mattman 18 Фев 2016 в 20:53

Ответ Мэттмана правильный, но следует добавить больше деталей. Мои ссылки в Project2 были в порядке. Однако в решении был еще один проект, Project3, который ссылался на версию Project1, полученную с нашего частного сервера nuget. Когда решение строится, все библиотеки DLL собираются в одном месте. Версия nuget из Project3 перезаписывала версию проекта Project1, и поскольку эта версия не была обновлена для включения Class1, я получал ошибку пространства имен. Я исправил проблему, удалив ссылку nuget из Project3 и вместо этого указав ее непосредственно на Project1.

0
allie 18 Фев 2016 в 21:56