【发布时间】:2012-03-20 06:47:35
【问题描述】:
我有一个工具包,其中包含许多方法,通常以Expression<Func<T,TProperty>> 作为参数。有些只能是单级 (o=>o.Name),而有些可以是多级 (o=>o.EmployeeData.Address.Street)。
我想开发一些东西(MSBuild 任务?Visual Studio 插件?希望是第一个),它可以读取所有用户的 .cs 文件,如果给定的参数不是属性表达式(但类似于 o=>o.Contains("foo") ),或者如果给出了只允许单级的多级表达式。
我尝试先查看已编译的 IL 代码,但由于表达式树是 C# 编译器的“技巧”,在 IL 中我看到的只是创建表达式实例等,虽然我可以检查每个 if只创建了 MemberExpressions(以及正确的数量),它不是很好。
然后我想到了罗斯林。 可以用 Roslyn 写出这样的东西吗?
【问题讨论】:
-
为什么需要强制执行这些约束?
-
因为我在这些方法中所做的事情(属性更改处理、错误检查等)只对属性表达式有意义
-
因为这感觉像是一件有趣的事情:)
-
作为 Roslyn VS 插件应该很容易做到。你甚至会得到漂亮的波浪线。
-
@CodeInChaos:您能否指出我应该在 Roslyn 寻找哪些课程?我以前从未使用过 Roslyn ......另外,它可以在 MSBuild 任务中完成吗?我发现那些插件更容易使用......