自定义.targets文件无法正常工作

时间:2011-03-01 21:05:34

标签: msbuild

我已经创建了一个自定义.targets文件,如下所示(只需将myproj.vcxproj文件中所需的所有常见任务添加到.targets文件中)

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- *******************************************************************************************
        Common tasks
       ******************************************************************************************* -->

  <Target Name="H1">
    <Exec Command="del /F/Q @(S_PACK_H1)" />
    <RemoveDir Directories="@(D_PACK_H1)" />
  </Target>
  <Target Name="H2">
    <Exec Command="del /F/Q @(S_PACK_H2)" />
    <RemoveDir Directories="@(D_PACK_H2)" />
  </Target>
  <Target Name="H11">
    <Exec Command="del /F/Q @(S_PACK_H11)" />
    <RemoveDir Directories="@(D_PACK_H11)" />
  </Target>

</Project>

所有的宏/数组如S_PACK_H1,D_PACK_H11都在myproj.vcxproj文件中定义,之后我将在myproj.vcxproj文件中导入它,如下所示

  <Import Project="C:\Program Files\MSBuild\MyCompany\Mycustom.targets" />

当我使用下面的cmd时

msbuild myproj.vcxproj / t:H11

它给出错误“错误MSB4057:目标”H11“在项目中不存在”

但如果我在.vcxproj文件中有相同的任务列表而不是.targets文件,那么它可以正常工作。

  1. 我可以在.vcxproj文件中定义宏并在.targets文件中使用它们吗? MSBuild能够获得该定义/值吗?如果没有,那么如何在.targets文件中使用/传递vxcproj文件中定义的内容?

  2. 为什么msbuild在.targets文件Vs .proj文件中无法看到我的任务?我还需要做什么?

1 个答案:

答案 0 :(得分:0)

没有明显的理由不这样做。是的,您可以在导入的文件中定义目标,并且无论导入的位置如何,它们都应该可用。如果您正在使用MSBuild 4.0(上面的.targets文件中没有ToolsVersion属性,所以我不确定)那么您可以生成一个完全预处理的文件,如下所示:

> msbuild mproj.vcxproj /pp

在同一文件夹中查找预处理文件。在文本编辑器中打开它并搜索导入的内容,它应该都在那里。如果没有,也许预处理的文件可以解决出错的问题。