是否可以从 MSBuild 项目中获取所有输出文件的列表?
在一个简单的项目中,我可以做类似的事情
<CreateItem Include="$(OutputDir)**\*">
<Output ItemName="AllOutputs" TaskParameter="Include"/>
</CreateItem>
但我的项目是更大构建的一部分,所有输出都到一个公共(public)位置,我希望能够排除不属于的 dll 和内容。
有任何想法吗?
最佳答案
再次查看您的评论后,我意识到我误解了您真正需要的内容。这是你手头上的一个有趣的问题。
如果您不介意编辑项目文件本身,您可能会得到漂亮的 关闭 到你想要的。有货文件写入 它跟踪在构建过程中写出的所有文件。要开始玩这个编辑项目文件有这个构建后 目标
<Target Name="AfterBuild">
<Message Text="FileWrites: @(FileWrites)" Importance="high"/>
</Target>
这种方法也存在一些问题
您可能认为可以使用 MSBuild: Find Many Project References 解决第一个问题。技术并在构建后输出 FileWrites 项。这仅在包装 proj 文件与原始项目本身放置在同一文件夹中时才有效,因为 .csproj 文件中的所有项目都使用相对路径声明。所以大部分都是这样。
您可以通过使用 FindUnderPath 任务来克服第二个限制,只获取放置在 中的文件。输出路径 文件夹。
您可以做但也不是很可靠的方法是在构建开始时检查 OutputPath,然后在构建结束时再次检查添加了什么。假设您将原始文件放入项目 StartFiles 并在构建结束时将所有文件放入名为 EndFiles 的项目中,您可以这样做:
<Target Name="SomeTargetHere">
<ItemGroup>
<FilesWritten Include="@(EndFiles)" />
<FilesWritten Remove="@(StartFiles)"/>
</ItemGroup>
<!-- Now FilesWritten contains the difference between EndFiles & StartFiles -->
</Target>
简而言之,我不确定是否有一个不涉及自定义任务或自定义记录器的好的解决方案:(。
赛义德·易卜拉欣·哈希米
我的书:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build
关于.net - 从 MSBuild 项目中获取输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1050110/