цель построения команды не выполнена - PullRequest
0 голосов
/ 24 июня 2011

У меня есть сборка tfs 2008, к которой нужно добавить WiX-совместимость.

В настоящее время сборка выполняется, компилируется и копируется весь вывод в папку «drop» в следующей цели

<Target Name="AfterCompile"> .... </Target>

Я добавил еще одну цель прямо под ней, которая выглядит следующим образом

<UsingTask TaskName="HeatDirectory" AssemblyFile="$(WixTasksPath)" />

<Target Name="BuildMsi" DependsOnTargets="AfterCompile">
  <Message Text="Start harvesting Website files for Wix compliation" />
  <HeatDirectory
                ToolPath="$(WixToolPath)"
                Directory="$(DropLocation)\Latest\x86\Release\_PublishedWebsites\IFMA.MasterPlan.Web"
                GenerateGuidsNow="yes"
                ComponentGroupName="Web"
                OutputFile="$(MSBuildProjectDirectory)\Setup\Product\Fragments\wwwfiles.wxs"
                SuppressFragments="yes"
                DirectoryRefId="WebRoot"
                KeepEmptyDirectories="yes"
                PreprocessorVariable="var.WebRoot"
                SuppressRegistry="yes"
                SuppressRootDirectory="yes"
                SuppressCom="yes"
                   />

  <Message Text="Finished harvesting Website files for Wix compliation" />

</Target>

Цель BuildMsi никогда не выполняется, но определенно имеет значение AfterCompile.

BuildMsi не указан в целях сборки по умолчанию но я подумал, что, поскольку он зависит от AfterCompile, он будет выполнен после него.

Что мне здесь не хватает?

1 Ответ

1 голос
/ 24 июня 2011

DependsOnTargets перечисляет цели, которые должны быть выполнены, прежде чем ваша цель может быть запущена, она не заставляет вашу цель запускаться после запуска списка целей.

См .: http://msdn.microsoft.com/en-us/library/t50z2hka(v=VS.90).aspx

Если вы используете MSBuild 4.0, вам нужен атрибут AfterTargets :

AfterTargets: необязательный атрибут.

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

В качестве альтернативы вы можете использовать целевое внедрение, которое в основном переопределяет свойство CompileDependsOn в вашем файле .proj, чтобы включить вашу цель в конце. Вам необходимо объявить это свойство после импорта общих целевых файлов, чтобы убедиться, что оно является последним определением свойства.

<PropertyGroup>
    <CompileDependsOn>
        $(CompileDependsOn);
        MyCustomTarget
    </CompileDependsOn>
</PropertyGroup>

Подробнее см. «Как расширить процесс сборки Visual Studio» .

...