Нужна помощь с TFS2010 + автоматизированная сборка + «Конфигурации для сборки = отладка»

В самом деле. странный. шиз.

Когда я выполняю TFS Team BuildRemote Deploy), некоторые #if DEBUG директивы препроцессора код моей веб-страницы не вызывается. Когда я вручную one-click deploy (remote deploy), preprocessor directive код работает. Когда я отлаживаю локально, код также работает.

Итак, проблема, похоже, связана с моими настройками конфигурации для Build Template, который у меня есть (я думаю ??). Итак, вот что у меня есть: -

альтернативный текст

Ничего особенного. Это говорит ... Пожалуйста, любезный компилятор. Создайте мой проект (читай: проект, а НЕ решение) в режиме «DEBUG».

У меня есть следующий код: -

#if DEBUG
    Log.Debug("We are in DEBUG mode.");
#else
    Log.Debug("We are _NOT_ in DEBUG mode.");   
#endif

Поэтому, когда вызывается этот код (на некоторой странице aspx), он выводит сообщение «Мы находимся в режиме DEBUG». когда это

  • Локальный хост (Конфигурация локального хоста: отладка)
  • Удаленный сервер с ручным повторным развертыванием в один клик (Конфигурация локального хоста: отладка)

Но не тогда, когда я позволил непрерывной интеграции TFS.

FML.

Я попытался выяснить, была ли это ситуация CASING (т.е. #if debug или #if Debug), но она все равно не работает.

Затем я даже попытался явно сообщить MSBuild конфигурацию ....

альтернативный текст

По-прежнему нет любви.

Ох .. но это пробка! У меня ТАКЖЕ есть некоторые преобразования web.config

  • web.config
  • web.debug.config
  • web.release.config

... и можете ли вы угадать, какой файл преобразован ?? Победитель, если вы угадали web.debug.config для всех сценариев ... даже для командной сборки, которая содержит ошибку в коде! Это похоже на процесс сборки, и рабочий процесс знает, что это DEBUG конфигурация .. kewl! а скомпилированный код этого не делает ???

Наконец, изменение debug="true" или debug="false" не имеет значения.

Может, кто-нибудь поможет, прежде чем я выпрыгну из этого здания? Меня убивает, когда в моей жизни постоянно возникают эти странные проблемы с задницей. вздох

Пожалуйста помоги!

ПРИМЕЧАНИЕ: Я больше не могу принимать пожертвования на самую маленькую скрипку в мире - мне уже дали много. Ваше здоровье :)


person Pure.Krome    schedule 01.07.2010    source источник


Ответы (2)


Что ж, я нашел ответ, но я не очень им доволен. Я сниму видео об этой ошибке и отправлю его по электронной почте Vishal @ MS ... чтобы узнать, что он думает :)

В любом случае, если вы внимательно посмотрите на конфигурацию по умолчанию везде, это ...

DEBUG | Any Cpu

альтернативный текст

там ничего необычного ...

Теперь, когда я меняю платформу на AnyCpu (обратите внимание, как я удалил пробел ...), теперь он работает нормально.

eg..

альтернативный текст

Что заставило меня задуматься об этом, так это когда я проверил файл .proj ... ... вот его фрагмент ...

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>9.0.30729</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
... snip for brevity ...
    <SccProvider>SAK</SccProvider>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
... snip for brevity ...
    <DesktopBuildPackageLocation />
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
... snip for brevity ...          
    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>

так что да ... я исправил это, но я не уверен, приемлемо ли это или просто случайность. Мне нужно получить реальные ответы от команды MS :)

person Pure.Krome    schedule 05.07.2010

Я могу подтвердить это поведение, а также способ решения проблемы. Похоже, VS2010 автоматически удалит пространство, когда он либо а) сохраняет значение платформы в файлы решения / проекта, или б) удаляет его при вызове MSBuild.

В любом случае механизм сборки TFS не следует этому шаблону, и обязательно удалить пространство вручную, если вы выбираете определенные значения Platform | Configuration.

Интересно отметить, что диалоговое окно TFS Build Definition позволяет вам вводить только Configuration. Он будет жаловаться, но затем примет ввод. Преимущество этого подхода заключается в том, что файл Microsoft.Common.targets корректно обрабатывает пустое входное значение Platform, по умолчанию выбрав AnyCPU.

person Manders    schedule 20.10.2011