Как я могу найти причину этой ошибки автоматической сборки TFS? - PullRequest
1 голос
/ 02 апреля 2012

У меня есть решение, которое содержит проект веб-сайта и несколько проектов, которые поддерживают классы поддержки. Каждый проект выполняет отдельную базовую функцию: Конфигурация, Данные, Идентичность, Бизнес-объекты и т. Д. Когда я открываю решение в VS2008, оно отлично строится. Он работает, запускается, отлаживает и не испытывает никаких исключений при компиляции или JIT.

После создания автоматического определения сборки в TFS 2010, сборка запускается и компилирует все подпроекты по порядку. Все они нацелены на «Debug | Mixed Platforms», потому что документация, которую я прочитал, пытаясь отследить мою ошибку, указывает на то, что это необходимо для проектов веб-сайтов. Я вижу в журнале сборки, где все недавно скомпилированные библиотеки и все сторонние библиотеки копируются как в каталог \Binaries, так и в каталог \bin веб-сайта. Тогда самые следующие строки в журнале:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe -v /MySolution -p ..\MySolution\ -u -f -d -fixednames D:\TFS\b\308\Binaries\_PublishedWebsites\MySolution\ 
D:\TFS\b\308\Sources\MySolution\SomeFolder\SomePage.aspx.vb(15): error BC30456: 'MyProperty' is not a member of 'Some_UserControl_ForPage'. [D:\TFS\b\308\Sources\Solution Files\MySolution.sln]
Done Building Project "D:\TFS\b\308\Sources\Solution Files\MySolution.sln" (default targets) -- FAILED.

Build FAILED.

"D:\TFS\b\308\Sources\Solution Files\MySolution.sln" (default target) (1) ->
(MySolution target) -> 
  D:\TFS\b\308\Sources\MySolution\SomeFolder\SomePage.aspx.vb(15): error BC30456: 'MyProperty' is not a member of 'Some_UserControl_ForPage'. [D:\TFS\b\308\Sources\Solution Files\MySolution.sln]

Данное свойство для пользовательского элемента управления принадлежит наследованию "дедушки и бабушки". Сам элемент управления наследует пользовательский WebUserControl в библиотеке бизнес-объектов. Этот класс, в свою очередь, наследуется от менее определенного WebUserControl, который имеет это базовое свойство. Когда строка кода закомментирована, ошибка меняется, но это еще одна «невозможная» ошибка, которая происходит дальше по цепочке сборки.

У нас есть другие проекты веб-сайтов, которые автоматически собираются и внедряются из этого агента сборки во всех средах 2.0+. Когда я изменяю различные свойства определения сборки (рабочая область и т. Д.) Или настраиваю конфигурацию сборки в самом решении, она не вызывает изменений в поведении. После завершения сборки все успешно собранные проекты попадают в папку сборки. Кроме того, в этом решении есть второй, менее сложный проект веб-сайта, который успешно создается и заканчивается в папке _PublishedWebsites в папке сборки.

1 Ответ

1 голос
/ 02 апреля 2012

Первым курсом было снятие отметки Use fixed naming and single page assemblies с настройкой свойств сайта. Это устранило физическую ошибку. Это была сделка коллеги, а не просчитанный ход, но я думаю, что по какой-то причине TFS не может разрешить вложенные ссылки. Несмотря на то, что это устранило опорную ошибку, в ней появилась новая ошибка, указывающая на неоднозначное пространство имен в пользовательском элементе управления. Предполагается, что, поскольку проект веб-сайта больше не ограничен одностраничными сборками, может быть создано несколько копий (почему это не так), что приводит к неоднозначности.

Я не до конца понимаю все тонкости этого решения, но прочитав о проблеме в этой статье блога Аарона Халльберга , я понимаю, что существуют различия между компилятором, поскольку он запускается в IDE и компилятор в том виде, в котором они запускаются на агенте автоматической сборки. Подводя итог его ответу, IDE автоматически не вставляет -u в MSBuild для веб-сайтов. Однако, поскольку TFS рассматривает только решение, а не рассматривает проект веб-сайта, он ищет настройку Debug.AspNetCompiler.Updateable. Если этот параметр включен, это может привести к неоднозначным пространствам имен в элементах управления. Я не понимаю, почему и чтение его поста в блоге ничего не прояснило для меня.

Снятие отметки Allow this precompiled site to be updated на страницах свойств веб-сайта позволило сайту правильно работать, и, поскольку он не является предварительно скомпилированным сайтом, это не оказало какого-либо неблагоприятного воздействия на сборку.

...