.net - 从 MSBuild 项目中获取输出文件

标签 .net msbuild build-process

是否可以从 MSBuild 项目中获取所有输出文件的列表?

在一个简单的项目中,我可以做类似的事情

<CreateItem Include="$(OutputDir)**\*">
      <Output ItemName="AllOutputs" TaskParameter="Include"/>
</CreateItem>

但我的项目是更大构建的一部分,所有输出都到一个公共(public)位置,我希望能够排除不属于的 dll 和内容。

有任何想法吗?

最佳答案

再次查看您的评论后,我意识到我误解了您真正需要的内容。这是你手头上的一个有趣的问题。

如果您不介意编辑项目文件本身,您可能会得到漂亮的 关闭 到你想要的。有货文件写入 它跟踪在构建过程中写出的所有文件。要开始玩这个编辑项目文件有这个构建后 目标

<Target Name="AfterBuild">
  <Message Text="FileWrites: @(FileWrites)" Importance="high"/>
</Target>

这种方法也存在一些问题
  • 您必须编辑项目文件本身
  • 这将包含写入中间输出目录(即 obj)和输出目录(即 bin)
  • 的文件
  • 如果有构建自定义,则不需要写入此项目

  • 您可能认为可以使用 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/

    相关文章:

    以编程方式下载 GitHub 私有(private)存储库的 C# 示例

    c# - 如何在自定义控件的属性网格中获取 OpenFileDialog?

    C#:是否与 C# 的 php ctype_digit 函数类似?

    .net - System.Windows.DependencyProperty 与 System.Workflow.ComponentModel.DependencyProperty

    java - 如何创建在动态位置使用外部 jar 文件的可运行 jar

    deployment - 如何从一个MSBuild脚本调用多个MSBuild脚本

    msbuild - NuGet 包 : ignore default includes

    msbuild - 使用 devenv.exe 在第一次编译错误时自动停止 Visual C++ 2008 命令行批处理构建?

    build-process - 一个 Xcode 4 项目,四个目标 "Variations"......

    javascript - 在我的 Javascript 构建过程中计算 CRAP 指标的简单方法是什么?