Задача MSBuild для создания других проектов решений не выполняется в VS, но работает с командной строкой MSBuild.exe - PullRequest
1 голос
/ 09 ноября 2011

У меня есть пользовательская задача MSBuild, которая, помимо прочего, добавляет встроенные ресурсы в другие проекты решения. После добавления ресурсов я хотел бы затем построить эти проекты, но обнаружил, что не могу заставить это работать в Visual Studio.

Для тестирования я полностью удалил пользовательскую задачу и переопределил простую цель AfterBuild в веб-проекте решения Silverlight. Цель использует задачу MSBuild для создания проекта приложения Silverlight в решении и выглядит следующим образом:

<Target Name="AfterBuild">
  <PropertyGroup>
    <LinkedProject>..\SilverlightApplication1\SilverlightApplication1.csproj</LinkedProject> 
  </PropertyGroup>

  <MSBuild Condition="'$(LinkedProject)' != '' "
    Projects="$(LinkedProject)"
    Targets="Build"
    Properties="CustomFlag=true" >
  </MSBuild>
</Target>

Странно то, что это прекрасно работает при использовании MSBuild из командной строки, но не работает в Visual Studio при сборке веб-проекта. Я подумал, что это может быть какой-то проблемой Silverlight, и вместо этого мне нужно было создать проект библиотеки классов .NET, но результат был тот же - он работал из командной строки, но не в VS. В VS нет реальной ошибки - просто задача Csc не компилирует сборку и не генерирует вывод.

Что мне нужно сделать, чтобы это работало в Visual Studio?

Ответы [ 2 ]

1 голос
/ 02 ноября 2012

Передайте свойство UseHostCompilerIfAvailable = false в задачу MSBuild.

Похоже, Visual Studio плохо работает, если csc вызывается из задачи MSBuild, поскольку он повторно использует начальные параметры сборки проекта для своего компилятора хоста в процессе. В моем случае я собирал один и тот же проект дважды - по умолчанию при сборке использовался целевой фреймворк v3.5, а в задаче AfterBuild MSBuild указывался v4.0. В итоге я столкнулся с той же проблемой - казалось, что csc работает, но ничего не выводит. Я думаю, что происходило то, что со свойством UseHostCompilerIfAvailable, установленным в true, csc вызывала размещенный компилятор, который повторно использовал мои первоначальные настройки проекта, поэтому, даже несмотря на то, что командная строка показала csc "сборку" моей сборки v4.0, компилятор хоста был просто перезаписываю только что созданный v3.5!

0 голосов
/ 10 ноября 2011

Измените детализацию Visual Studio на подробную и проверьте журнал сборки. Я думаю, что CoreBuild не выполняется, если ваши файлы не изменились, поэтому вы можете попробовать использовать AfterCompile вместо AfterBuild.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...