如何将PDB从其他包含目录复制到lib输出目录?

时间:2016-06-15 02:12:24

标签: msbuild

我有一个复杂的解决方案,包含许多项目和许多用户添加新项目。我们设置第三方库的方式,我们需要将3p lib的.pdb文件复制到包含它的lib旁边。例如,如果我们使用LibFoo,我们将有一个项目调用OurLibFoo,它包装LibFoo,对其进行抽象,并设置对它的依赖。因为Visual Studio只会查找带有最终可执行文件的.pdb文件或者它自己构建的库,所以它只会查找LibFoo.pdb的Path-to-OurLibFoo。所以我们有一个自定义构建步骤,它使用xcopy将LibFoo.pdb复制到Path-To-OurLibFoo。我正在尝试通过设置一个自定义目标来简化和自动化该过程,该目标将读取AdditionalLibraryDirectory并将每个目录中的所有pdb文件复制到$(OutDir)。我无法让它正常工作,毫无疑问,因为我从根本上误解了msbuild变量的结构。以下是一些不起作用的代码:

<Target Name="CopyPdbs" AfterTargets="BeforeLib" DependsOnTargets="Lib" BeforeTargets="AfterLib">
    <ItemGroup>
      <Lib Include="@(ClCompile)"/>
    </ItemGroup>
    <ItemGroup>
      <Pdb Include="%(Lib.AdditionalLibraryDirectories)"/>
    </ItemGroup>
    <ItemGroup>
      <PdbNames Include="@(Pdb->'%(rootdir)%(directory)*.pdb')"/>
    </ItemGroup>
    <ItemGroup>
      <PdbNamesExplicit Include="@(PdbNames)"/>
    </ItemGroup>
    <Message Text="Copying files for falcon... @(PdbNamesExplicit)" Importance="high" />
    <Copy SourceFiles="@(PdbNamesExplicit)" DestinationFolder="$(OutDir)" ContinueOnError="false" />        
  </Target>

此操作失败,因为Copy不接受带通配符的路径,并且PdbNames中的通配符永远不会被扩展。 (它也可能因其他原因而失败,但我还没有那么远。)

我怎样才能更简洁,更重要的是,正确地做到这一点?

谢谢!

0 个答案:

没有答案