如何使用XML使用T4生成Visual Studio Project?

时间:2011-12-18 14:40:16

标签: .net-4.0 code-generation t4

大家好!

在早些时候可以使用 Code-Dom ,我发现使用 T4 比Code-Dom容易得多。我经历了很多文章 但我仍然没有能够起草符合我要求的代码。

我需要根据自动生成的XML文档生成代码[我能够根据我的要求生成XML文档]。

看起来像这样:

    <?xml version="1.0" encoding="utf-8" ?>
<GeneratedSolution Name ="name of Solution">
<GeneratedProject ID="RepoProject" Name ="name of Project" MajorVersion="1" MinorVersion="0" CopyRight="GeneratedProject company" Language="C#" OutExtension="cs">
<Compiler path = "../path/compilername" Build="silent" ExternalBuildTool="NAnt" />

<GeneratedRepository Name ="name of Repository Class" Description="This is generated Repository class would be used for overall-application" TemplateRefence ="../path/repository.tt">
<Operation Name = "Operation1" Description = "This is operation1 of Repository class">
<operationID>1</operationID>
</Operation>
<Operation Name = "Operation2" Description = "This is operation2 of Repository class">
<operationID>2</operationID>
</Operation>
</GeneratedRepository>

</GeneratedProject>

<GeneratedProject ID="BusinessProject" Name ="name of Project" MajorVersion="1" MinorVersion="0" CopyRight="GeneratedProject company">

<GeneratedBusiness Name ="name of Business Class" Description="This is generated Business class would be used for overall-application" TemplateRefence ="../path/business.tt">
<Operation Name = "Operation1" Description = "This is operation1 of Business class">
<operationID>1</operationID>
</Operation>
<Operation Name = "Operation2" Description = "This is operation2 of Business class">
<operationID>2</operationID>
</Operation>
</GeneratedBusiness>

</GeneratedProject>

<GeneratedProject ID="UIProject" Name ="name of Project" MajorVersion="1" MinorVersion="0" CopyRight="GeneratedProject company">

<GeneratedUI Name ="name of UI Class" Description="This is generated UI class would be used for overall-application" TemplateRefence ="../path/UI.tt">
<Operation Name = "Operation1" Description = "This is operation1 of UI class">
<operationID>1</operationID>
</Operation>
<Operation Name = "Operation2" Description = "This is operation2 of UI class">
<operationID>2</operationID>
</Operation>
</GeneratedUI>

</GeneratedProject>

</GeneratedSolution>

没有。课程,项目可能在单一解决方案中有所不同。 我阅读了一些文章,提供了从xml创建项目的想法,但我需要更多的东西来生成代码,如上面的“XML”样本。

非常感谢在这方面的任何帮助。

2 个答案:

答案 0 :(得分:1)

免责声明 - 我们发现的方法,但完全开源。

在链接的博客上,我们描述了一种基于强定义的输入数据(以XML架构形式)控制生成输出的方法。我们通过T4团队的博客提到了一个问题 - 强调它只是标准的T4使用:

http://blogs.msdn.com/b/t4/archive/2011/11/30/some-nice-new-getting-started-with-t4-videos.aspx

可以通过以下方式直接访问博客视频的链接:

http://abstractiondev.wordpress.com/demo-videos/

对于T4经验丰富的用户,视频已经从头开始并解释了用法。我正在通过简单的下载添加基本结构(对于git用户,它可以通过https://github.com/abstractiondev/absInitializer的git获得。)

如果您需要任何帮助,请告诉我该博客上的联系信息,如果您喜欢我们的方法论方法,并希望将其用于您这一代,我会为您“抽象”它。 / p>

答案 1 :(得分:0)

您可以使用Mono.TextTemplating(MonoDevelop的一部分)从您自己的应用程序运行T4模板,并生成您想要的任何代码部分。如果您不喜欢单独的应用程序的想法,可以为visual studio编写自定义代码工具,它将运行您需要的所有转换。