Я пытаюсь получить метод ldtoken
IL для загрузки универсального экземпляра универсального метода в универсальном классе (скажем, List.ConvertAll<TOutput>
):
ldtoken method instance
class [mscorlib]System.Collections.Generic.List`1<!!0>
[mscorlib]System.Collections.Generic.List`1::ConvertAll<string>(
class [mscorlib]System.Converter`2<!0,!!0>)
Это приводит к исключению:
Необработанное исключение: System.TypeLoadException: не удалось загрузить тип «System.Collections.Generic.List`1» из сборки «TestAssembly, версия = 0.0.0.0, культура = нейтральная, PublicKeyToken = null».
Он ищет в моей тестовой сборке System.Collections.Generic.List
, хотя он явно объявлен в mscorlib
!
Однако загрузка неэкземплярного токена метода работает:
ldtoken method instance
class [mscorlib]System.Collections.Generic.List`1<!!0>
[mscorlib]System.Collections.Generic.List`1::ConvertAll<[1]>(
class [mscorlib]System.Converter`2<!0,!!0>)
Общий метод в неуниверсальном классе работает:
ldtoken method void [mscorlib]System.Array::Sort<object>(!!0[])
ldtoken method void [mscorlib]System.Array::Sort<[1]>(!!0[])
В чем дело? Это ошибка в .NET? (Я воспроизвел это на v2 и v4 CLR)
class [mscorlib]System.Converter`2<!!0,string>
? - person svick   schedule 29.05.2012TypeLoadException
с тем же сообщением - person thecoop   schedule 29.05.2012