访问引用项目中的项
Accessing items in a referenced project
当一个 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
,只是想办法拿到这些东西。
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"。
当一个 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
,只是想办法拿到这些东西。
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"。