Конфигурация MSBuild «Debug» не работает в VS 2010 Beta 2 - PullRequest
2 голосов
/ 21 января 2010

Я пытаюсь настроить свою среду для разработки, отладки и развертывания гаджетов Windows Desktop. Я столкнулся с некоторыми препятствиями в своем проекте, когда не могу запустить сборку на своем гаджете, когда для конфигурации задано значение «Отладка». Если для конфигурации задано «Выпуск», сборка выполняет следующие пользовательские задачи:

  1. Копирование содержимого гаджета в отдельную папку.
  2. Сокращение / обфускация файлов JavaScript, удаление комментариев и пробелов.
  3. Упакуйте файлы в CAB-файл.
  4. Подпишите CAB-файл цифровым сертификатом.

Это работает просто отлично, в моей конфигурации "Debug" определены следующие задачи

  1. Скопировать папку гаджета в AppData\Local\Microsoft\Windows Sidebar\Gadgets\.
  2. Запустите гаджет с помощью интерфейса IDesktopGadget.

Если я скопирую эти две задачи в конфигурацию «Выпуск», они будут работать нормально - никаких проблем. Я попытался создать отдельную конфигурацию под названием «Test», скопированную из конфигурации «Release».

Если я пытаюсь создать какую-либо конфигурацию, отличную от «Release», я получаю мгновенное сообщение о том, что «Build успешно», но никакие задачи не выполнялись вообще.

РЕДАКТИРОВАТЬ: Я начал награду, потому что у меня все еще та же проблема с VS 2010 RC, и это очень расстраивает.

ДОПОЛНИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ:
Благодаря Джону я смог отладить процесс сборки. Это привело меня к пониманию того, что элемент <Target> с условием отладки полностью игнорируется (даже не обрабатывается). Когда я поменял положение моих <Target> элементов, это сработало:

<Target Name="Build" Condition="'$(Configuration)' == 'Release'">
  <!--
      <Obfuscate PathToJasob="C:\Program Files (x86)\Jasob.com\Jasob 3.5" Path="$(GadgetFolder)" Output="$(GadgetName)_obf" log="jasob_log.txt" />
  -->
  <BuildGadget BuildFormat="CAB" Path="$(GadgetFolder)" Target="$(GadgetName).gadget" />
  <SignGadget CertName="Cert1" TimestampURL="http://timestamp.comodoca.com/authenticode" Target="$(GadgetName).gadget" />
</Target>
<Target Name="Build" Condition="'$(Configuration)' == 'Debug'">
  <CopyToGadgets GadgetFolder="$(GadgetFolder)" GadgetName="$(GadgetName)" />
  <RunGadget GadgetName="$(GadgetName)" />
</Target>

Похоже, что второй элемент <Target Name="Build"> переопределяет первый, несмотря на наличие атрибута Condition. Что я могу сделать?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2010

Как предполагает Джо:

Измените путь вывода следующим образом, и посмотрите, решит ли это проблему:

<OutputPath>bin\Debug\</OutputPath>

Обновление

Вы пробовали запустить msbuild /verbosity:diagnostic?

Можете ли вы попробовать это и показать вывод?

Второе обновление

Создайте одну цель 'build', а затем сделайте две задачи в этой цели:

<Target Name="Build">
    <CallTarget Targets="BuildRelease" Condition="'$(Configuration)' == 'Release'" />
    <CallTarget Targets="BuildDebug" Condition="'$(Configuration)' == 'Debug'" />
</Target>

<Target Name="BuildRelease">
    <!--
        <Obfuscate PathToJasob="C:\Program Files (x86)\Jasob.com\Jasob 3.5" Path="$(GadgetFolder)" Output="$(GadgetName)_obf" log="jasob_log.txt" />
    -->
    <BuildGadget BuildFormat="CAB" Path="$(GadgetFolder)" Target="$(GadgetName).gadget" />
    <SignGadget CertName="Cert1" TimestampURL="http://timestamp.comodoca.com/authenticode" Target="$(GadgetName).gadget" />
</Target>

<Target Name="BuildDebug">
  <CopyToGadgets GadgetFolder="$(GadgetFolder)" GadgetName="$(GadgetName)" />
  <RunGadget GadgetName="$(GadgetName)" />
</Target>
2 голосов
/ 21 января 2010

Просто предположение:

Выходной путь вашей сборки Debug установлен на bin\Release\. Временные метки файлов в bin\Release\, вероятно, заставляют MSBuild сделать вывод, что отладочная сборка уже обновлена. Попробуйте изменить путь вывода на bin\Debug\ для отладочных сборок.

...