У меня есть проект веб-сайта, который я хочу создать с помощью CruiseControl.net.
На одной странице находится пользовательский элемент управления, вложенный в элемент управления повторителем, и мне нужно получить строго типизированную ссылку на этот пользовательский элемент управления в обработчике событий ItemDataBound:
ASP.usercontrols_stars_ascx stars = (ASP.usercontrols_stars_ascx)e.Row.FindControl("stars");
stars.StarCount = Convert.ToInt32(drv["rating"]);
Это нормально работает в VS2008, но ломается в MSBUILD со следующей ошибкой:
w:\CCNet\InflatableBoats\Working\IBWeb\UserControls\DisplayReviews.ascx.cs (49,):
errorCS0234: тип или имя пространства имен usercontrols_stars_ascx не существует в пространстве имен ASP (вам не хватает ссылки на сборку?)
Я думаю, что это может быть проблема с пространством имен, потому что MSBUILD, похоже, не распознает пространство имен ASP, которое проект веб-сайта использует для пользовательских элементов управления и страниц.
Ответ 2 · TrueWill
Очевидно, если вы ссылаетесь на сборку на вкладке "Обзор", которая указана на вкладке .NET диалогового окна "Добавить ссылку" (что не то же самое как GAC), который находится в том же месте установки, Visual Studio предполагает, что вы хотите использовать реестр для поиска файла. Я думаю, что он устанавливает для конкретной версии значение True, и это единственный способ заметить это в среде IDE. Это не позволяет кому-либо другому компилировать его, даже если у них одинаковые библиотеки DLL в одном месте, если только они не запустили установщик для этого пакета.
Однажды это укусило меня с помощью CruiseControl, когда я установил блок приложения Unity прямо в папку TFS, а затем добавил двоичные файлы в TFS. В файле .csproj не было записи HintPath для ссылки, поэтому сервер сборки не смог найти DLL.
В итоге я удалил блок с помощью "Установка и удаление программ", а затем снова получил двоичные файлы из TFS. Удаление и повторное добавление ссылок устранило проблему.
Это может не иметь отношения к вашей ситуации (сначала я бы попробовал предложение jrummell), но подумал, что упомянул бы об этом.
Visual Studio имеет тенденцию предполагать, что знает лучше, чем разработчик. Обычно это не так.