在使用 Visual Studio 2008 进行 C# 编程时,我经常希望“自动”生成代码。如果可能的话,我想通过调用 Rake 调用我的 MSBuild 解决方案文件来实现它,它会调用 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”+ [属性名称] 的属性,对于 IConsumerQuarterlyResults 也是如此。
为什么要为这些创建接口,而不仅仅是为 Consumer 提供一个 IQuarterlyResults 实例,为 Corporate 提供另一个实例?因为,在使用我正在构建的计算器对象时,用户必须处理 100 个属性,如果他可以处理“完全限定”的属性名称,例如“ConsumerNetProfit”,那么混淆就会少得多。
但我们不要在这个例子中陷入困境。这只是一个例子,而不是主要问题。
主要问题是:我喜欢使用 Ruby 和 ERB 进行代码生成,我喜欢使用 Rake 来管理任务之间的依赖关系。为了解决上述问题,我想做的是让 MSBuild 调用 Rake,并让 Rake / Ruby 读取“核心”接口上的属性列表,然后生成代码以生成所有依赖接口及其特性。这会在我每次构建时触发,因为我将它放入 VS.NET 解决方案的 MSBuild 文件中。
有没有人尝试过这样的事情?你的效果如何?您可以分享哪些关于利弊、成功秘诀等方面的见解?
谢谢!