Аналогичный вопрос задавали и отвечали примерно год назад, но это была другая проблема (все было в бета-версии) или неправильно диагностировано. Он находится здесь: Задача MSbuild завершилась неудачно, потому что "Любой CPU" решение построено не по заказу.
Моя проблема в том, что у меня есть проект установщика wix, и после обновления до Tfs2010 в понедельник сборка не работает при связывании, потому что она не может найти продукт сборки приложения Wpf в проекте. После некоторого рытья, потому что он еще не построен. Здание в Vs2010 работает как обычно. Проект wix установлен в зависимости от проекта Wpf, и при просмотре Project Build Order в среде IDE все выглядит как обычно.
Проблема была первоначально встречена только с двумя определениями платформы в решении; x86 и x64. Есть также два варианта: Debug и Release, а TFSBuild.proj настроен на сбор всех четырех комбинаций. В AnyCPU не было места. По указанному выше вопросу я попытался изменить проект Wpf на использование AnyCPU, чтобы он был построен первым. На этом этапе проект wix использовал точную конфигурацию, а проект Wpf использовал аромат с AnyCPU. Однако это не изменило ничего.
Я использую RTF RTF RTM, Vs2010 RTM и самую последнюю версию Wix, которая на момент написания этой статьи была 3.5.1602.0, с 2010-04-02. Кто-нибудь еще сталкивается с этим?
2010-04-27: после достаточного количества копания и воспроизведения на клонированной машине сборки VM, я считаю, что знаю, что происходит, а также то, что не удается, но я не совсем знаете, как это исправить.
Ситуация заключается в том, что эта ошибка, по-видимому, проявляет симптомы, основанные на простом заказе проекта "Удача в рисовании" в файле решения. Кажется, что файл решения будет просто слепо строить проекты в том порядке, в котором они появляются, опираясь на его способность обнаруживать незастроенные ссылки и строить их по требованию, когда это необходимо.
В моем конкретном файле решения мой проект Wix был заказан перед моим проектом приложения Wpf. Это привело к тому, что сначала был создан проект Wix, и в то время как зависимость от проекта Wpf была обнаружена правильно, фактическая задача MSBuild была пропущена из-за переменной undefined $(BuildProjectReferences). Я упоминаю пару комментариев с основного сообщения в этой теме. С многословием MSBuild, все еще находящимся в диагностике, BuildProjectReferences можно рассматривать как undefined, создавая проект Wix, и его можно увидеть определенным как true при создании проекта Wpf в рамках задачи для создания проекта Wix. Тем не менее, при тестировании он снова оценивает undefined, задача пропускается, а сборка Wix выходит из строя, потому что она не может найти результат сборки незастроенного проекта Wpf.
Итак, нижняя строка: зависимость проекта пропускается из-за плохой переменной $(BuildProjectReferences). Интересно, что эта переменная присутствует только в файле Wix2010.targets, а не в wix.targets; Я предполагаю, что это происходит только после того, как я установил Tfs2010 и Vs2010.
Решение. Как убедиться, что BuildProjectReferences правильно переданы для последующих задач MSBuild? Есть ли что-то особенное с переменным охватом?
2010-09-14: ошибка была обнаружена для этой проблемы в наборе инструментов WiX: http://sourceforge.net/tracker/?func=detail&atid=642714&aid=2990231&group_id=105970 и исправлено некоторое время назад. Надеюсь, это уже не проблема. Если это так, пожалуйста, откройте новую ошибку.
Чтобы напрямую ответить на ваш комментарий, ничто в моем решении не имеет конфигурации AnyCPU в своих файлах сборки. Я создал конфигурации AnyCPU только для проверки решения, предложенного потоком, с которым я связан, в моем исходном сообщении. После того, как это не сработало, я снова удалил конфигурации AnyCPU.
Кроме того, проекты находятся в одном файле решений, однако в отдельных папках решений (папка с интерфейсом, папка установщика), если это имеет значение.
Интересно, что я собирался сделать небольшой пример песочницы, чтобы я мог проиллюстрировать проблему, с которой я столкнулся, однако после создания моего маленького образцового решения я не смог получить ошибку для воспроизведения. Это заставляет меня думать, что, возможно, это результат использования командного проекта, который был обновлен из проекта команды Tfs2008, а не того, который был создан в Tfs2010. Я могу попробовать развернуть мой проект в новый, чтобы проверить эту теорию, если я не могу понять, почему работает тестовое решение.
p.s. Кроме того, я новичок в stackoverflow - почему комментарии ограничены по длине, если рабочий процесс "ответит на свой вопрос" предназначен только для предоставления конкретных ответов?
Итак, я бросил сборку подробностей до диагностики и прочитал ее сегодня, и одна строка, в частности, выделялась мне:
Task "MSBuild" skipped, due to false condition; ('@(_ProjectReferenceWithConfiguration)'!='' and '$(BuildingInsideVisualStudio)' != 'true' and '$(BuildProjectReferences)' == 'true' and '@(_MSBuildProjectReferenceExistent)' != '') was evaluated as ('..\WpfApp\WpfApp.csproj'!='' and '' != 'true' and '' == 'true' and '..\WpfApp\WpfApp.csproj' != '').
Это было замечено, поскольку мой проект-установщик пытался создать мой проект wpf с момента ссылки на проект wpf. В частности, по какой-то причине $(BuildProjectReferences) оценивает "когда я уверен, что это должно быть" правда ".
Однако ранее в журнале, в начале задачи MSBuild для проекта WpfApp, я увидел это:
Task "MSBuild" (TaskId:15)
...
Initial Properties:
...
BuildProjectReferences = true
Итак, свойство действительно было правильным до начала задания, но затем, по-видимому, было перезаписано? Я не понимаю, как эти свойства устанавливаются.