是否有可能获得全部的列表从MSBuild项目的所有输出文件?
在一个简单的项目,我可以做类似
<CreateItem Include="$(OutputDir)**\*">
<Output ItemName="AllOutputs" TaskParameter="Include"/>
</CreateItem>
但我的项目是一个大的构建的一部分,并且所有输出到一个共同的位置,我希望能够exculde DLL和不属于内容。
有任何想法吗?
是否有可能获得全部的列表从MSBuild项目的所有输出文件?
在一个简单的项目,我可以做类似
<CreateItem Include="$(OutputDir)**\*">
<Output ItemName="AllOutputs" TaskParameter="Include"/>
</CreateItem>
但我的项目是一个大的构建的一部分,并且所有输出到一个共同的位置,我希望能够exculde DLL和不属于内容。
有任何想法吗?
看着您的评论后,我再次意识到我错intrepreted你真正需要的东西。 这是你有你的手一个有趣的问题。
如果你不介意编辑项目文件本身可能能够获得非常接近你想要什么。 有一个跟踪所有在生成过程中被写入了文件的项目FileWrites。 要开始使用此编辑玩弄项目文件中有这样的AfterBuild目标
<Target Name="AfterBuild">
<Message Text="FileWrites: @(FileWrites)" Importance="high"/>
</Target>
有一些问题,这种方法也
你可能会认为你可以与解决第一个问题的MSBuild:发现很多项目参考做构建后技术和输出FileWrites项目。 如果包装PROJ文件放在同一个文件夹中原来的项目本身,因为所有的一个.csproj的文件里面的物品都使用相对路径宣布这只会工作。 因此,有云,对于大部分。
您可以通过使用FindUnderPath任务只能获得放置在OutputPath文件夹中的文件得到了第二个限制。
你可以做的,但是是不是真的可靠无论是在构建河畔年底再次审查在构建的开头的OutputPath,然后看看添加什么。 比方说,你把原来的文件到一个项目的开始文件,并在构建结束把所有的文件放到一个项目名为EndFiles你可以在做:
<Target Name="SomeTargetHere">
<ItemGroup>
<FilesWritten Include="@(EndFiles)" />
<FilesWritten Remove="@(StartFiles)"/>
</ItemGroup>
<!-- Now FilesWritten contains the difference between EndFiles & StartFiles -->
</Target>
总之我不知道,如果有不涉及任何自定义任务或自定义记录仪:(一个很好的解决方案。
赛义德·易卜拉欣·哈希米
我的书: 里面的微软构建引擎:使用的MSBuild和团队基础生成
如果您使用的MSBuild任务 ,那么你可以得到的是通过使用TargetOutputs输出内置的文件。 下面是一个例子
<MSBuild Projects="YourProject.csproj">
<Output ItemName="YourProjectOutputs" TaskParameter="TargetOutputs"/>
</MSBuild>
因此,在这种情况下,当YourProject.csproj是建立了创建将被放置在YourProjectOutputs项目里面的文件。
我创建了一个博客条目前一阵子,在详细谈论这个, 的MSBuild:如何获取所有已生成的输出 。
赛义德·易卜拉欣·哈希米
我的书: 里面的微软构建引擎:使用的MSBuild和团队基础生成
看看我以前的博客条目的MSBuild:发现很多项目引用 。 在该文章中,我介绍了如何创建一个MSBuild文件,可以提取出来的值作为参考的ItemGroup。 在你的情况下,只需更换,我与所有在OutputPath找到的文件填充的项目中创建的目标。 让我知道如果你要我就此展开。
我们做什么战斗是这种情景每个版本创建一个“部署”目录(你可以把你想要什么都)。
deploy目录仅包含了所需实际应用的可执行文件和DLL(即测试dll文件不要放在那里)。 每个项目需要得到它的“部署”的东西到该目录中(我们甚至可以添加子目录(即网络,服务等)。)
它只是重复一些位,但它可以让你从构建访问所有的DLL(如果需要)。