我有一个复杂的解决方案,包含许多项目和许多用户添加新项目。我们设置第三方库的方式,我们需要将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中的通配符永远不会被扩展。 (它也可能因其他原因而失败,但我还没有那么远。)
我怎样才能更简洁,更重要的是,正确地做到这一点?
谢谢!