当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
,只是以某种方式获取项目。
答案 0 :(得分:1)
XmlPeek任务允许查询任何XML文件:
<XmlPeek Namespaces="<Namespace Prefix='n' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/>"
XmlInputPath="%(ProjectReference.FullPath)"
Query="/n:Project/n:ItemGroup/n:SpecialFile/@Include">
<Output TaskParameter="Result" ItemName="SpecialFiles" />
</XmlPeek>
此代码将从所有引用的项目中收集SpecialFile项。请为您的项目指定ToolsVersion =“4.0”。