我的 T4 模板实例化了一个 Excel COM 对象以读取一些单元格值并从中创建 C# 类。我首先用常规 C# 编写了 Excel 读取逻辑,效果很好。我在此测试中使用的代码片段是:
Worksheet xlWorkSheet;
string cellContents = xlWorkSheet.Cells.Item[1, 1].Value;
但是,将测试代码移植到 T4 模板中是行不通的。显示以下错误:
Error 1: Compiling transformation: 'object' does not contain a definition for 'Value' and no extension method 'Value' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
我解决这个问题的唯一方法是添加一些手动转换:
string cellContents = (xlWorkSheet.Cells.Item[1, 1] as Range).Value as string;
我的印象是 T4 使用“常规”C# 编译器,因此能够像常规代码一样处理动态绑定。但显然,存在差异。在这种情况下,我可以解决我的问题,因为我能够猜测要转换为哪种类型。但总的来说,情况并非如此。有没有办法让这种后期绑定在 T4 模板中工作?