使用Visual Studio 2008在C#中编程时,我经常希望"自动"生成代码.如果可能的话,我想通过让我的MSBuild解决方案文件调用Rake来实现它,Rake会调用Ruby代码来生成代码,生成的文件会自动出现在我的解决方案中.
这是一个业务示例(我可以命名的许多可能的示例),这种自动代码生成会有所帮助.在最近的一个项目中,我有一个包含一些包含美元金额的属性的界面.我想要第二个接口和第三个接口,它们具有与第一个接口相同的属性,除了它们是"合格"的业务单元名称.像这样的东西:
public interface IQuarterlyResults { double TotalRevenue { get; set; } double NetProfit { get; set; } } public interface IConsumerQuarterlyResults { double ConsumerTotalRevenue { get; set; } double ConsumerNetProfit { get; set; } } public interface ICorporateQuarterResults { double CorporateTotalRevenue { get; set; } double CorporateNetProfit { get; set; } }
在这个例子中,有一个"消费者业务部门"和一个"公司业务部门".IQuarterlyResults上的每个属性都成为ICorporateQuarterlyResults上名为"Corporate"+ [property name]的属性,同样也是IConsumerQuarterlyResults的属性.
为什么要为这些接口创建接口,而不仅仅是为Consumer提供IQuarterlyResults的实例,为Corporate提供另一个实例?因为,在使用我正在构建的计算器对象时,用户必须处理100个属性,如果他可以处理"完全限定"的属性名称(例如"ConsumerNetProfit"),那就不那么容易混淆了.
但是,在这个例子中,我们不要陷入困境.这只是一个例子而不是主要问题.
主要问题是:我喜欢使用Ruby和ERB来生成代码,我喜欢使用Rake来管理任务之间的依赖关系.为了解决上面的问题,我想做的是让MSBuild调用Rake,并让Rake/Ruby读取"核心"接口上的属性列表,然后生成代码以生成所有相关接口及其属性.每次进行构建时都会触发这个,因为我将它放入VS.NET解决方案的MSBuild文件中.
有没有人尝试过这样的事情?它是如何为你工作的?您可以分享哪些见解,包括优缺点,成功秘诀等等?
谢谢!