如何使用MSBuild将另一个项目导出为Visual Studio模板项目?

时间:2009-09-13 23:17:27

标签: visual-studio-2008 templates msbuild msbuildcommunitytasks

这就是我想要实现的目标。我在C#和VB中有许多项目,我希望将其作为模板项目导出,作为自动构建过程的一部分。导出模板很容易以交互方式进行,但我需要将其作为自动构建过程的一部分。此外,模板项目必须在导出之前实际构建,以便在最终用户使用模板时保证编译它们。 [我知道模板项目通常不会编译,但我已经解决了这个问题,所以为了这个问题的目的,我们可以把它看成是模板项目将成功编译的。]

我打算使用MSBuild社区任务来压缩我最终导出的模板项目。但是,我不能将此操作放在模板项目本身中,因为该操作将作为模板的一部分导出,而这不是我想要发生的。

所以我的想法是我可以创建一个新的单独的MSBuild项目,检查其他模板项目,发现其中的文件,添加预定义的MyTemplate.vstemplate文件,压缩这些文件和“walla”,这是我的导出模板。

到目前为止一切顺利。唯一的问题是,我是一个完整的MSBuild菜鸟,我无法入门。拜托,我会重视有关如何实现这一目标的任何建议。

我痛苦地意识到这几乎是“为我做我的工作”类型的问题,我的辩护是(a)它实际上不是我的工作和(b)我试图做我的MSBuild家庭作业和灵感就是不流动。

1 个答案:

答案 0 :(得分:2)

没有“为你做”(),我怎么样告诉你它在其他地方是如何完成的?我在yonder做了同样的事情:

http://github.com/AArnott/dotnetopenid/commits

具体来说,projecttemplates / WebFormsRelyingParty Web项目由build.proj文件的BuildProjectTemplates目标转换为项目模板。

我的策略是拥有一个我正在处理的普通(可编译)C#Web项目。我在该文件夹中还有一个.vstemplate文件,已添加到项目中,但是我可以进行更改。然后在我的构建期间,我让MSBuild构建网站,将结果(不包括网站构建的大部分产品)复制到临时位置。在复制期间,我有一个自定义的MSBuild任务,用所有源文件中的$ safeprojectname $替换我的Web应用程序名称,因为这是VS项目模板创建者所做的事情。它还会复制图标以用于模板。最后,它将其压缩并将.zip文件放在我的输出目录中。