gpt4 book ai didi

c# - 有人有过从 MSBuild 调用 Rake 以获得代码生成和其他好处的经验吗?进展如何?你有什么想法/建议?

转载 作者:数据小太阳 更新时间:2023-10-29 07:18:57 27 4
gpt4 key购买 nike

在使用 Visual Studio 2008 进行 C# 编程时,我经常希望“自动”生成代码。如果可能的话,我想通过让我的 MSBuild 解决方案文件调用 Rake 来实现它,Rake 会调用 Ruby 代码来生成代码,生成的文件会自动出现在我的解决方案中。

这是一个业务示例(我可以举出许多可能的示例),其中这种自动代码生成会很有帮助。在最近的一个项目中,我有一个接口(interface),其中包含一些包含美元金额的属性。我想要第二个接口(interface)和第三个接口(interface),它们具有与第一个接口(interface)相同的属性,只是它们“限定”了业务单位名称。像这样:

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 上名为“公司”+ [属性名称] 的属性,IConsumerQuarterlyResults 也是如此。

为什么要为这些创建接口(interface),而不是仅仅为消费者提供一个 IQuarterlyResults 实例,为企业提供另一个实例?因为,在使用我正在构建的计算器对象时,用户必须处理 100 多个属性,如果他能够处理“完全限定”的属性名称(例如“ConsumerNetProfit”),就不会那么困惑。

但我们不要陷入这个例子。这只是一个例子,不是主要问题。

主要问题是:我喜欢使用 Ruby 和 ERB 来生成代码,我喜欢使用 Rake 来管理任务之间的依赖关系。为了解决上面的问题,我想做的是让 MSBuild 调用 Rake,让 Rake/Ruby 读取“核心”接口(interface)上的属性列表,然后生成代码来制作所有依赖接口(interface)及其特性。这会在我每次构建时触发,因为我将它放入 VS.NET 解决方案的 MSBuild 文件中。

有没有人试过这样的事情?结果如何?关于优缺点、成功秘诀等,您可以分享哪些见解?

谢谢!

最佳答案

我们用 Nant/ruby+ERB 做到了——它在我们的 DAL 中生成了一种 CRUD 的基调,并为我们的网络应用程序生成了数据输入表单输入。对我们来说它工作得很好,但一开始有大量的设置时间让我的老板/客户感到紧张,因为他们认为我们应该展示比原型(prototype)更多的产品。

还要确定这一代人在做什么 - 生成和修改与生成 + 集成之间存在差异。生成和修改更像是使用向导,而且是一次性的。当您生成 + 集成时,您需要了解您将在何处/如何通过继承或通过从手写代码到生成代码的库调用来利用生成的代码。

Ruby/erb 执行速度不快。一种确定何时需要/不需要生成的方法很有用,因为编译周期开始变得漫长且效率低下。我们还发现,在将其集成到工作流程之前,始终构建一个小型测试用例以生成甚至一组工件是有帮助的——您对产品进行了测试,并且在您处理 cg 元素时它不会减慢任何人的速度).

我会读 Jack Herringtons Code Generation in Action因为它面向 ruby 。它让我进入了 CG。

我也想要 Kathleen Dollards Code Generation in Microsoft .NET .它是为使用 XSLT 而构建的,但开发元数据、转换和集成阶段的原则是相同的。您在杂志和网络上找到的她的文章也很有帮助。

关于c# - 有人有过从 MSBuild 调用 Rake 以获得代码生成和其他好处的经验吗?进展如何?你有什么想法/建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/679009/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com