使用C#进行T4代码转换

时间:2012-05-05 00:01:36

标签: c# wcf t4 transformation

简而言之,我目前正在为我的大学研究一个研究问题,该研究侧重于基于分析和设计方法的面向服务的解决方案的模型转换。在收集元模型之后,我的工作是将这些需求转换为可行且可部署的WCF组件服务库。到目前为止,我已经成功地使用预处理文本模板将所有必需对象转换为C#代码,但我的问题是:

  • 如何将所有生成的文件与可构建的项目文件(* .csproj)组合在一起。我不希望用户必须手动创建新项目并添加生成的文件。相反,应该自动生成一个包含所有文件并添加了组件引用,用户应该能够从磁盘上的某个位置打开项目。
  • 处理或管理程序集引用的最佳方法是什么?如何在运行时包含它们?即要使用[ServiceContract]属性标记接口,我首先需要添加Systems.ServiceModel作为项目的引用,然后将其包含在模块中。怎么办呢?
  • 最后,如何生成web.config配置文件以定义服务行为,端点地址,绑定或任何其他所需设置。我不认为T4模板是正确的方法。

对于上述问题的任何建议或指导将不胜感激。

1 个答案:

答案 0 :(得分:2)

啊哈,我能够通过使用带有程序集引用的预定义项目模板和已包含的默认web.config来实现此目的。完成转换后,我将使用与转换后的服务相关的详细信息更新web.config中的相应部分。

DTE2 dte2 = (DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.10.0");
Solution2 soln = (Solution2)dte2.Solution;

string templateFileLoc = soln.GetProjectTemplate("My Pre-defined project template", "csproj");

soln.AddFromTemplate(templateFileLoc, outputDir, projectName, false);

var proj = soln.Projects.Item(soln.Projects.Count);

proj.ProjectItems.AddFromFileCopy(generatedFile);