Следующее вызывает это исключение:
У вас есть сборка A, которая определяет следующий класс:
public class AC
{
public BC GetBC() { /* ... */ }
}
У вас есть сборка B, которая определяет класс BC
.Теперь, когда вы загружаете сборку A и получаете члены класса AC
, например, используя assembly.GetTypes().SelectMany(t => t.GetMembers()).ToList();
, платформа пытается разрешить BC
.Он даже знает, что он в сборке B
.Однако, если инфраструктура разрешает сборку B
, которая не содержит BC
, будет выброшено TypeLoadException
.Это может произойти, если сборка B
не обновлена, поскольку вы забыли ее в своем развертывании.
ОБНОВЛЕНИЕ:
Чтобы получить ReflectionTypeLoadException
,сценарий очень похож.Однако вам не нужно иметь метод в AC
, который возвращает BC
, но вам нужно извлечь AC
из BC
:
public class AC : BC
{
}
Используя свойство LoaderExceptions
, выможет извлечь исключения, которые приводят к этому ReflectionTypeLoadException
.В моем случае это TypeLoadException
с указанием типа, который он не может загрузить.