访问引用项目中的项目

时间:2015-02-06 10:39:12

标签: visual-studio msbuild

当C#项目引用另一个C#项目(例如lib)时,Visual Studio会将类似的内容添加到项目文件中:

<ItemGroup>
  <ProjectReference Include="..\some\path\lib.csproj">
    <Project>{4beb6b28-90f5-77c3-af2a-f5fa3336dac9}</Project>
    <Name>Lib</Name>
  </ProjectReference>
</ItemGroup>

我们假设,lib.csproj包含一些这样的项目:

<SpecialFile Include="foo.dll" />
<SpecialFile Inclued="bar.txt" />

如何访问第一个项目文件中的这些SpecialFile项?我想做这样的事情:

<Target Name="SpecialFileCopyTarget" AfterTargets="AfterBuild">
  <Copy
      DestinationFolder="$(OutputPath)"
      SourceFiles="@(SpecialFile)"         <-- ?????
      SkipUnchangedFiles="true" />
</Target>

我想我不想Import lib.csproj,只是以某种方式获取项目。

1 个答案:

答案 0 :(得分:1)

XmlPeek任务允许查询任何XML文件:

<XmlPeek Namespaces="&lt;Namespace Prefix='n' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/&gt;"
         XmlInputPath="%(ProjectReference.FullPath)"
         Query="/n:Project/n:ItemGroup/n:SpecialFile/@Include">
  <Output TaskParameter="Result" ItemName="SpecialFiles" />
</XmlPeek>

此代码将从所有引用的项目中收集SpecialFile项。请为您的项目指定ToolsVersion =“4.0”。