【发布时间】:2011-03-08 18:44:51
【问题描述】:
我正在与一个合作伙伴合作,我们正在尝试将复杂的驱动程序从 .NET 平台迁移到 .NET MicroFramework。
问题是 .NET MF 不支持泛型,当我们尝试构建应用程序时,最后一个“链接”操作退出,错误代码为“CLR_E_PARSER_UNSUPPORTED_GENERICS”。 但是没有关于 WHERE(模块、代码行)的信息。
据我们所知,没有人故意插入泛型,他们一直在仔细检查代码以确定问题所在,但没有运气。
所以我的问题是:有没有办法在 VS2010 中关闭对泛型的支持,以便编译器标记有问题的行?
【问题讨论】:
-
可以用反射器反编译。可能是某些语言构造隐式使用泛型,例如匿名类型。见:blogs.msdn.com/b/ericlippert/archive/2010/12/20/…
-
这是一个非常幼稚的基本建议(如果很明显,请原谅我):为什么不用
grep你的源代码中没有空格的小于号? AFAIK 小于号仅用于小于比较和指定泛型类型时;没有其他的。而且 AFAIK 没有在某处提及完整(封闭)类型名称的情况下实际使用泛型。也许你会发现这样使用泛型...... -
另外,虽然这很可能对您没有帮助,但我记得当我使用 COM 互操作时,我通常不得不更改
CLSCompliant和ComVisible属性值,因为编译器是抱怨使用泛型(COM 无法处理泛型)。也许你也可以为了你的目的滥用这些标志属性(尽管老实说我不这么认为)。 -
@stakx:cmets 中的小于号呢?字符串? XML 文档 cmets? 类型的字段。该程序使用泛型,但没有任何泛型语法。
-
@Eric:1. 是的,毫无疑问,除了感兴趣的匹配项之外,您会得到很多错误匹配项。尽管如此:它仍然会将您必须阅读的代码总行数减少到一小部分;其次,这只是一个建议;精通正则表达式的人可能会想出一个排除更多“误报”的模式。 2. "其中 C.X 是 IEnumerable
" 类型的字段;没关系,因为 C.X 在某处被声明或初始化,需要找到这些点来捕获泛型类型。但完整的源代码必须搜索。
标签: c# .net generics .net-micro-framework