我面临一个奇怪的例外:谷歌找不到任何关于它的东西(这是非常罕见的)。
代码:
new Query<TElement>(/* ... arguments ...*/);
Thew a exception
System.TypeLoadException
收藏类型'L.Caching.Query`1 [&lt;&gt; transientClass1]'可能没有线程或上下文静态成员。
我终于解决了这个问题,但这值得一谈谷歌! (我会回答这个问题)
让我把事情放在他们的背景下:
<>transientClass1
,是一个动态生成的类(使用Reflection.Emit) - 非常无情:它等同于编写匿名类型时生成编译器的类型new{a=thing, b=otherThing}
Query<T>
只是另一个通用类。什么可能导致该异常?
答案 0 :(得分:0)
答案部分在'Collectible Assemblies for Dynamic Type Generation'
的最后一部分线程静态数据不支持线程静态变量。
但是这部分是不够的,因为类<>transientClass1
没有声明任何线程静态数据。
但Query<T>
确实如此。因此,由于<>transientClass1
属于可收集的程序集,Query< <>transientClass1>
必须符合相同的要求(因为它也可以收集)。
这就是为什么可以使用Query<T>
成功的原因,<>transientClass1
也是如此,但混合两者都抛出了这个例外。
要解决这个问题,我只需要在另一个类中移动我的线程静态字段(并在Query<T>
中安全使用)。