2015-02-06 33 views
1

當一個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> 

我想我不想Importlib.csproj,剛剛得到的物品莫名其妙。

回答

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」。

相關問題