Skip to content

Commit ede78b2

Browse files
committed
fix(settings): preserve partially loadable reflection types
Recover successfully loaded types from ReflectionTypeLoadException instead of discarding the entire assembly. Keep distinct loader failure messages in one diagnostic without repeating full exception stacks.
1 parent d46d77c commit ede78b2

1 file changed

Lines changed: 16 additions & 0 deletions

File tree

src/Settings/ModSettings/Mirrors/RuntimeReflection/RuntimeReflectionMirrorSource.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,22 @@ private static IEnumerable<Type> SafeGetTypes(Assembly asm)
153153
{
154154
return asm.GetTypes();
155155
}
156+
catch (ReflectionTypeLoadException ex)
157+
{
158+
var loadedTypes = ex.Types.OfType<Type>().ToArray();
159+
var loaderFailures = ex.LoaderExceptions
160+
.OfType<Exception>()
161+
.Select(static exception => exception.Message)
162+
.Distinct(StringComparer.Ordinal)
163+
.ToArray();
164+
var details = loaderFailures.Length == 0
165+
? "No loader details were provided."
166+
: string.Join(" | ", loaderFailures);
167+
168+
RitsuLibFramework.Logger.Warn(
169+
$"[RuntimeReflectionMirrorSource] Partially enumerated assembly '{asm.FullName}': recovered {loadedTypes.Length} of {ex.Types.Length} type(s); skipped unloadable types. {details}");
170+
return loadedTypes;
171+
}
156172
catch (Exception ex)
157173
{
158174
RitsuLibFramework.Logger.Warn(

0 commit comments

Comments
 (0)