是否可以从MSBuild项目中获取所有输出文件的列表?从MSBuild项目中获取输出文件
在一个简单的项目,我可以做类似
<CreateItem Include="$(OutputDir)**\*">
<Output ItemName="AllOutputs" TaskParameter="Include"/>
</CreateItem>
,但我的项目是一个大的构建的一部分,并且所有输出到一个共同的位置,我希望能够exculde DLL和内容那不属于。
任何想法?
是否可以从MSBuild项目中获取所有输出文件的列表?从MSBuild项目中获取输出文件
在一个简单的项目,我可以做类似
<CreateItem Include="$(OutputDir)**\*">
<Output ItemName="AllOutputs" TaskParameter="Include"/>
</CreateItem>
,但我的项目是一个大的构建的一部分,并且所有输出到一个共同的位置,我希望能够exculde DLL和内容那不属于。
任何想法?
再次看到您的评论后,我意识到我误解了您真正需要的东西。这是你手上有趣的问题。
如果你不介意编辑项目文件本身,你可能会得到漂亮的关闭到你想要的。有一个项目FileWrites跟踪构建过程中写出的所有文件。要开始使用此编辑玩弄项目文件中有这样的AfterBuild目标
<Target Name="AfterBuild">
<Message Text="FileWrites: @(FileWrites)" Importance="high"/>
</Target>
有一些问题,这种方法也
你可能会认为你可以做一个生成后与MSBuild: Find Many Project References技术和输出解决第一个问题的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>
总之我不知道是否有一个很好的解决方案,不涉及任何自定义任务或自定义记录仪:(
赛义德·易卜拉欣·哈希米
的My Book:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build
如果您使用的是MSBuild task,那么您可以获取使用TargetOutputs输出生成的文件。这是所以当YourProject.csproj是建立了创建将被放置在YourProjectOutputs项目里面的文件该情况的一个例子
<MSBuild Projects="YourProject.csproj">
<Output ItemName="YourProjectOutputs" TaskParameter="TargetOutputs"/>
</MSBuild>
。
前段时间我创建了一个博客条目,详细介绍了这个,MSBuild: How to Get All Generated Outputs。
赛义德·易卜拉欣·哈希米
的My Book:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build
感谢您的建议,问题是TargetOutputs只包含输出程序集,并且GetOutputs任务包括输出目录中的所有内容,即使msbuild项目未创建/复制它。 – 2009-06-30 14:36:23
看看我以前的博客条目MSBuild: Find Many Project References。在那篇文章中,我将描述如何创建一个可以提取Reference ItemGroup的值的MSBuild文件。在你的情况下,只需将我创建的目标替换为从OutputPath中找到的所有文件填充项目的目标。让我知道你是否希望我扩大这一点。
我们做什么战斗是这种情景每个版本创建“部署”主任Ÿ(你可以称它为你想要的)。
部署目录仅包含实际应用程序所需的可执行文件和dll(即,测试dll不会放在那里)。每个项目都需要将其“可部署”的东西放到该目录中(我们甚至添加子目录(即Web,服务等)。)
它重复了一些位,但它可以让你访问所有的dll如果需要,建立。
我想有一个共同的“部署”目录,但能够确定哪些文件是由每个项目创建的 – 2009-07-07 13:19:37
感谢您的详细解答。 – 2009-07-07 13:20:09