Компиляция веб-сайта ASP.NET - Intellisense видит новое свойство во внешней сборке, но при компиляции проверка завершается неудачно - PullRequest
0 голосов
/ 15 ноября 2011

У меня есть сайт "Проект". Он содержит ссылки на сборки на внешние библиотеки DLL, которые мы время от времени обновляем (своего рода «фреймворк»). Visual Studio 2008 успешно создает «обновляемые» файлы, которые используются для обновления ссылок во время компиляции.

Я сделал дополнение к enum во внешней сборке и перекомпилировал его. Вернувшись в проект веб-сайта, я обновил ссылку (щелкнув правой кнопкой мыши внешнюю библиотеку DLL, указанную в папке «Корзина» и выбрав «Обновить ссылку»), а также зайдя на страницы свойств веб-сайта и на страницу ссылок, выделив моя внешняя сборка и нажатие кнопки «Обновить».

В папке App_Code веб-сайта есть класс, в который я внес некоторые изменения, использующие новое значение enum из внешней сборки. Intellisense подхватывает новое дополнение, и среда IDE вообще не жалуется на то, что я его использую, пока я не попытаюсь создать решение.

При создании решения я получаю ошибку BC30456, которая является ошибкой "{0}" и не является членом {1} ". Ошибка остается в представлении «Список ошибок» и в окне «Вывод», пока я снова не обновлю ссылку на внешнюю сборку, после чего ошибка немедленно исчезнет.

Если я полностью удаляю ссылку из проекта, VS корректно начинает жаловаться на отсутствие типа enum и предупреждает, что не удается найти пространство имен, которое я пытаюсь импортировать. Когда я снова добавляю ссылку на сборку, через несколько секунд все ошибки и предупреждения исчезают. При первой попытке перестроить решение и / или веб-сайт я снова получаю сообщение об ошибке.

Я пытался подтвердить, что я не сумасшедший, выполняя следующие задачи:

  1. Очистка папки временных файлов ASP.NET для веб-сайта, как 32-разрядных, так и 64-разрядных версий Framework
  2. Ручное копирование сборки из внешнего расположения прямо в папку Bin
  3. Закрытие и повторное открытие Visual Studio
  4. Перезагрузка компьютера

Единственное, что я сейчас заметил, это то, что внешняя DLL была в последний раз построена 14.11.2011. Когда эта версия DLL находится в папке Bin, Intellisense является точным. Как только я пробую сборку, DLL и PDB возвращаются к сборке от 11.11.2011. Я не знаю, откуда это. И сборки DEBUG, и RELEASE этой библиотеки DLL на этом компьютере предназначены для 11/14. DLL не регистрируются в нашей системе контроля версий, только файлы .refresh, поэтому их нельзя обновлять с сервера контроля версий.

Я действительно, действительно, озадачен и ищу любые ваши идеи.

1 Ответ

0 голосов
/ 15 ноября 2011

И, конечно, я понял это через 5 минут после того, как задал вопрос ...

У проекта веб-сайта есть другая ссылка на внешнюю сборку (B), которая зависит от той, с которой у меня возникли проблемы (A).При сборке, когда она обновляла ссылку B, она переопределяла библиотеку DLL ссылки A из расположения в файле .refresh с помощью библиотеки DLL из папки bin, где был построен B, что оказалось сборкой 11/7.

Обновление ссылки A скопировал правильную DLL в папку Bin.Обновление ссылки B переопределило ее во время компиляции.

...