2011-03-01 43 views
0

我创建了一个自定义的.targets文件,如下(只是添加了所有在myproj.vcxproj文件要求.targets文件中的常见任务)定制.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.vcxpr OJ /吨:H11

它提供了一个错误“错误MSB4057:目标‘H11

’不会在项目存在”,但如果我有.vcxproj文件,而不是.targets相同的任务列表文件然后它工作正常。

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

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

回答

0

这没有明显的原因不起作用。是的,您可以在导入的文件中定义目标,并且它们应该可用,无论导入的位置在哪里。如果您使用的MSBuild 4.0(有你的.targets没有ToolsVersion属性上面的文件,所以我不知道),那么你就可以生成一个完全处理后的文件,如:

> msbuild mproj.vcxproj /pp 

查找经过预处理的文件在同一个文件夹中。在文本编辑器中打开它并搜索导入的内容,它应该都在那里。如果不是这样,那么预处理过的文件可能会揭示出错的原因。