如何使用MSBuild在单个应用程序套件包中组装多个.NET可执行文件?

时间:2012-08-24 16:33:59

标签: c# visual-studio-2010 msbuild packaging

我有多个解决方案,每个解决方案都有多个项目。

我想要做的是将这些项目的一个子集从可能不同的解决方案组合成一个“包”并按原样部署。

我可以编辑每个项目并更改它的输出文件夹,但这会产生反效果,特别是这些项目中的一些是不同目标包之间的共享依赖项。这将造成一个繁琐的混乱,非常容易出错。

理想情况下,我也希望在最终包中如何组装它们有一些自由,也许这个应用程序位于包的根文件夹中,但也许这个其他可执行文件将放在最终包的子文件夹中。

最后,我工作的团队不熟悉MSBuild,因此最终的解决方案应该可以从VisualStudio中使用。

我正在考虑创建一个扫描项目依赖项的任务,并简单地将每个输出文件夹的内容复制到专门项目的输出文件夹中(包含任务)。如有必要,可以通过属性文件对最终目的地进行微调。

有更好的方法吗?


按包我只是指一个包含所有工件的文件夹,可能是可执行文件,DLL,资源,配置文件等。但是我仍然希望将它们作为单独的实体保存。

2 个答案:

答案 0 :(得分:0)

我假设你试图获得一个没有外部dll的可执行文件。为此,在exe上使用post-compile事件调用ILMerge将exe和dll组合成一个exe。

http://www.microsoft.com/en-us/download/details.aspx?id=17630

答案 1 :(得分:0)

我最终创建了一个新的输出文件夹,我在其中复制了项目构建的输出。然后依赖于第一个项目的其他项目将拉出内容并与他们合并,然后再处理他们自己的额外输出文件夹,以在依赖树中重复该过程。

这确保了所有人工制品都能贯穿到最终应用程序的构建中,不仅仅是DLL。

我当时需要这样做,然后在归档后将整个内容打包。

它也适用于构建系统,因为额外的文件夹被压缩为下游项目可以使用和合并的人工制品。虽然不是很干净,但工作得很好,满足了我的需求。事后我可能会利用nuget以更清洁和可维护的方式实现相同的结果。