使用 MSBuild 压缩多个项目目录

2024-04-16

作为 MSBuild 4.0 中构建过程的一部分,我最终得到以下目录结构:

\OutDir
    \ProjectA
      \File1.dll  
      \File2.dll  
      \File3.exe
    \ProjectB
      \Subfolder1
        File4.html
      \File5.dll  
      \File6.dll  
      \File7.exe
    \ProjectC
      \File8.dll  
      \File9.exe

我希望能够为每个子文件夹创建一个 zip 文件\OutDir。如果我执行以下操作:

<ItemGroup>
  <ZipSource Include="\OutDir\**.*" />
</ItemGroup>

<MSBuild.Community.Tasks.Zip
  Files="@(ZipSource)"
  ZipFileName="OutDir\%(ZipSource.RecursiveDir)ZippedOutput.zip"
  WorkingDirectory="OutDir" />

然后每个子文件夹都会被递归压缩,这对于 ProjectS 和 Project 来说效果很好,但 Project 最终会得到两个 zip 文件,一个是其根文件夹,一个是其子文件夹。

我的另一个要求是构建文件不知道项目的数量,因此我不能只创建一个 ItemGroup 并枚举我想要压缩的项目。

在 NAnt 中通过其 foreach 任务可以很容易地完成此任务,但如何在 MSBuild 中实现此任务,最好不诉诸自定义任务?


我想出了一个解决方法 - MSBuild 扩展包的 FileUnder 任务的组合,用于枚举我想要压缩的 ProjectX 文件夹,以及调用 7Zip 的 Exec 任务。代码是:

<MSBuild.ExtensionPack.FileSystem.FindUnder
    TaskAction="FindDirectories"
    Path="$(WebOutputFolder)"
    Recursive="False">
    <Output ItemName="WebsiteFolders" TaskParameter="FoundItems" />
</MSBuild.ExtensionPack.FileSystem.FindUnder>

<Exec Command="7za.exe a -r %22$(OutDir)%(WebsiteFolders.Filename)-$(Configuration)-$(AssemblyFileVersion).zip%22 %22@(WebsiteFolders)\*%22" />

因此,现在每个 zip 文件都以其内容所在的文件夹命名(以及配置和版本控制详细信息),因此我的输出文件夹中将包含名为 ProjectA-Debug-0.1.2.345.zip 等的文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MSBuild 压缩多个项目目录 的相关文章

  • MSBuild:部署未包含在项目中的文件

    我在一个 Web 项目上有一个预构建事件 该事件使用 Node js 缩小并连接 javascript 文件 这会在脚本文件夹中创建一个名为 BuiltScripts 的文件夹 该文件夹与脚本文件夹重复 只是文件被缩小了 当我进行部署时 我
  • Bug:VS2017 Live 单元测试 - 只有减号 - 不起作用

    TL 博士 编辑6 我缩小了范围并提供了重现问题 错误的 5 个步骤 创建 VS2017 c 控制台应用程序 Net 完整框架 将方法添加到 Program cs 并使该类公开 public class Program static voi
  • Equals 和 GetHashCode 方法不一致

    读完这个问题后为什么 int 和 sbyte GetHashCode 函数生成不同的值 https stackoverflow com questions 12501979 why do int and sbyte gethashcode
  • 如何在C#中剪切、编辑和合并OGG文件?

    我有一个 ogg vorbis 文件 我必须用它执行两个操作 将文件的一部分从一个位置剪切到另一个位置 将另一个文件与现有文件合并 如何在 C 中执行这两个操作 你可以使用 libzplay 来做到这一点http libzplay sour
  • 使用AOP技术拦截ADO.Net

    我有相当大的代码库 使用各种不同的 ADO 技术 即一些 EF 在某些情况下直接使用 ADO Net 我想知道是否有任何方法可以全局拦截任何 ADO Net 调用 以便我可以开始审核信息 例如执行的确切 SQL 语句 花费的时间 返回的结果
  • 主动解决方案平台 VS 项目平台 VS 目标平台

    我希望我的应用程序是针对 x64 构建的 因为我使用的是 x64 dll 在配置管理器中 我已将 活动解决方案平台 设置为 x64 但是在项目列表中平台设置为 x86 项目属性中的 平台目标 也设置为 x86 我完全困惑有三个地方可以设置目
  • 在 XAML 中设置依赖项属性时,为什么会在运行时绕过 .NET 属性包装器?

    我正在阅读 Adam Nathan 的书 WPF 4 Unleashed 第 82 页有以下警告 在 XAML 中设置依赖属性时 NET 属性包装器会在运行时被绕过 虽然 XAML 编译器依赖于 编译时的属性包装器 WPF 调用底层 直接在
  • 通过命令行参数更改默认的 ant 目标

    最近我被分配了一个任务 让ant能够为不同的环境构建war包 除了一项功能外 我几乎完成了 蚂蚁接受一个env参数类似 Denv DEV 并使用不同的配置文件来制作war包 但默认目标是start它将构建 部署并启动 tomcat 我不希望
  • 检查 SSRS 报告自定义代码中的 Active Directory 组成员资格表单

    我正在构建 SQL Server Reporting Services SSRS 报告 查看报告的最终用户可以选择某些输入参数 在本例中为位置 用户可以选择的位置取决于 Active Directory 组成员身份 因此我尝试在自定义报告功
  • 从 AuthorizeAttribute 继承的属性不起作用

    我目前正在尝试根据用户角色在新的 ASP MVC 5 应用程序中实现安全性 目标是防止用户在没有特定角色 或更高角色 的情况下访问某些控制器或控制器方法 根据到目前为止我所读到的问题 我创建了一个继承 AuthorizeAttribute
  • 如何在 Visual Studio 中调试时强制异常?

    我正在调试模式下运行我的应用程序 并且我想手动抛出异常 即不是从代码内部抛出异常 有什么办法可以做到这一点吗 当然 跑步throw new Exception My forced exception 在命令或立即窗口中不起作用 编辑 我希望
  • 从 .NET 文本中提取关键字

    我需要计算每个关键字在字符串中重复出现的次数 并按最高次数排序 NET 代码中用于此目的的最快算法是什么 编辑 下面的代码将唯一标记与计数分组 string target src Split new char var results tar
  • 使用 TFS API 在单个查询中检索工作项及其链接的工作项

    有谁知道是否可以检索工作项目及其列表链接的工作项使用 TFS API Web 服务从 TFS 进行一趟 目前 我们必须对第一次调用期间进行的每个工作项进行第二次调用 并且引入了性能问题 如果这不可能 是否有办法查看链接工作项的类型而不检索它
  • DateTime.Ticks 没有 100 ns 的分辨率? [复制]

    这个问题在这里已经有答案了 可能的重复 C DateTime Now 精度 https stackoverflow com questions 2143140 c sharp datetime now precision SO 有一些关于
  • SingleOrDefault异常处理

    我有一个示例代码 它调用 SingleOrDefault 方法 3 次 并在任何序列具有多个匹配元素时记录异常 如果我想检查这段代码的哪一部分抛出异常 问题就开始了 是否可以从此异常中获取一些有用的信息 例如谓词参数或集合类型以进行更详细的
  • 将参数传递给模板类型的 C# 泛型 new()

    添加到列表时 我试图通过其构造函数创建一个 T 类型的新对象 我收到编译错误 错误消息是 T 创建变量实例时无法提供参数 但我的类确实有一个构造函数参数 我怎样才能做到这一点 public static string GetAllItems
  • .Net 6 控制台应用程序:WebApplication.CreateBuilder 与 Host.CreateDefaultBuilder

    我正在研究 NET 6 并希望构建一个简单的控制台应用程序 并进行一些依赖项注入 据我所知 为了使启动 现在只是程序 文件更具可读性 已经做了很多工作 让我有点困惑的是 所有改进似乎都是针对 API 项目中使用的 WebApplicatio
  • 在Python3.6中调用C#代码

    由于完全不了解 C 编码 我希望在我的 python 代码中调用 C 函数 我知道有很多关于同一问题的问答 但由于一些奇怪的原因 我无法从示例 python 模块导入简单的 c 类库 以下是我所做的事情 C 类库设置 我使用的是 VS 20
  • 无法转换类型为“NHibernate.Collection.Generic.PersistentGenericBag”的对象

    public List
  • 将 System.Windows.Forms.Keys 序列转换为 Char

    有没有办法转换由 Keys 枚举表示的击键序列 即System Windows Forms Keys 在一个字符中 例如 Keys Oem4进而Keys A产生 char 它一定存在于 WinAPI 中的某个地方 因为当我在文本框中按下按键

随机推荐

  • Protractor:彻底清除浏览数据

    我正在寻找一种使用 Protractor 完全删除所有 cookie 会话 状态 cookie 存储等的方法 基本上 我想在量角器中完成与用户相同的事情 方法是转到 设置 gt 清除浏览数据 browser manage deleteAll
  • CsvHelper 更改日期和时间的输出方式

    我在用CSV助手 https joshclose github io CsvHelper 编写一些 CSV 文件 并希望将日期和时间的格式更改为特定的格式 遵循以下建议https stackoverflow com a 31817621 2
  • React-Native:从剪贴板设置和获取文本时出错

    import React useState from react import SafeAreaView View Text TouchableOpacity StyleSheet from react native import Clip
  • 分类变量的多重共线性

    对于数值 连续数据 为了检测预测变量之间的共线性 我们使用皮尔逊相关系数并确保预测变量之间不相关 但与响应变量相关 但我们怎样才能检测到多重共线性如果我们有一个数据集 其中预测变量都是绝对的 我正在共享一个数据集 我试图找出预测变量是否相关
  • 在 VB.NET 中防止 Math.Round(95.55555555,2) 四舍五入到 95.56

    If I do Math Round 95 55555555 2 在 VB NET 中 结果是95 56 但我希望结果是95 55 有没有办法在 VB NET 中做到这一点 我想我只是想保留小数位 而不是四舍五入 好像Math Trunca
  • 使用 PATH 列出 MediaStore 中的所有音乐

    好吧 我已经在这个项目上工作了几天 我的大部分时间都在研究如何在列表视图或其他东西中列出设备上的所有音乐 我已经搜索了几天并且这简直要了我的命 我确实一度非常接近显示一个文件夹中的所有音乐 但由于大多数人都会有像 artiest 和专辑这样
  • MySQL中如何压缩列?

    我有一个存储电子邮件通信的表 每当有人 回复 整个路径也被包含并保存到 数据库 我需要这样 因为应用程序的数量 级别更改以纠正太高的情况 尺寸mail文本列是10000 但是 我在存储文本时遇到的困难还不止这些 由于我不确定可以发生多少个通
  • 图库的 xml 树解析器 (Haskell)

    我正在编写一个用于处理图形的库 主要任务 解析 xml tree 这棵树看起来像
  • 使网页浏览器的背景透明

    我试图使我的网络浏览器的背景像android中的wb setBackground Color transparent 一样透明 有可能吗 thanks Renaud WebBrowser 控件不是真正的 Silverlight 控件 因此不
  • 如何在汇编器中实现相对 JMP (x86)?

    在为 x86 平台构建汇编程序时 我遇到了一些编码问题JMP操作说明 OPCODE INSTRUCTION SIZE EB cb JMP rel8 2 E9 cw JMP rel16 4 because of 0x66 16 bit pre
  • 如何指定两个操作在类型类中交换?

    我开始读书这篇关于 CRDT 的论文 http pagesperso systeme lip6 fr Marc Shapiro papers RR 6956 pdf 这是一种通过确保修改数据的操作是可交换的来同时共享可修改数据的方法 在我看
  • 曲面细分着色器 - OpenGL

    layout vertices 3 out void main void if gl InvocationID 0 gl TessLevelInner 0 5 0 gl TessLevelOuter 0 5 0 gl TessLevelOu
  • WPF MediaElement 应用程序的播放列表

    我正在通过构建 WMP 类型的应用程序来学习 C 和 WPF 下面的代码运行良好 从列表框中选择一部电影在媒体元素中运行它 我遇到的问题是找到一种方法在电影结束后自动开始下一部电影 谢谢 提供电影列表的 xml 文件 熊 c 电影 Bear
  • 将 BitmapImage 转换为灰度,并保留 Alpha 通道

    我在将 BitmapImage WPF 转换为灰度并同时保留 Alpha 通道时遇到问题 源图像是 PNG MSDN 文章here http msdn microsoft com en us library system windows m
  • app.config 中 ClientSettingsProvider.ServiceUri 的用途

    什么是
  • Git 推送到非裸仓库,保存当前工作树

    如何推送到非裸 git 存储库 自动添加并提交工作树中的任何更改 然后重新签出当前分支以反映该推送的更改 我在想这样的事情 在远程 非裸存储库 上添加一个钩子来运行git add git commit m Automated commit
  • 无法识别的属性“targetFramework”。请注意,属性名称区分大小写

    我刚刚安装了 vs 2010 然后在 Windows 7 中安装了 IIS 在 net Framework 4 0 中构建网站并将其转换为 IIS 中的应用程序时 它显示此错误 如果我删除targetFramework 4 0 从网络配置文
  • VSCode 终端进程命令启动失败

    我正在尝试你好世界样本 https github com Microsoft vscode extension samples tree master helloworld sample扩大 但是当我从 运行扩展 任务运行扩展时 它给出以下
  • UIActivityViewController 或 UIDocumentInteractionController 与 WhatsApp 和 FB

    我需要使用 Facebook 和 WhatsApp 作为我的图像的共享选项 我已经实现了 UIActivityViewController 我可以通过 Facebook 分享和UIDocumentInteractionController我
  • 使用 MSBuild 压缩多个项目目录

    作为 MSBuild 4 0 中构建过程的一部分 我最终得到以下目录结构 OutDir ProjectA File1 dll File2 dll File3 exe ProjectB Subfolder1 File4 html File5