diff --git a/PSCompatibilityCollector/Microsoft.PowerShell.CrossCompatibility/Collection/TypeDataCollector.cs b/PSCompatibilityCollector/Microsoft.PowerShell.CrossCompatibility/Collection/TypeDataCollector.cs
index 8ec0d0f03..19710dde6 100644
--- a/PSCompatibilityCollector/Microsoft.PowerShell.CrossCompatibility/Collection/TypeDataCollector.cs
+++ b/PSCompatibilityCollector/Microsoft.PowerShell.CrossCompatibility/Collection/TypeDataCollector.cs
@@ -347,7 +347,9 @@ private MemberData AssembleMembers(Type type, BindingFlags memberBinding)
                 switch (member)
                 {
                     case ConstructorInfo constructor:
-                        constructors.Add(AssembleConstructor(constructor));
+                        if (TryAssembleConstructor(constructor, out string[] cInfo)) {
+                            constructors.Add(cInfo);
+                        }
                         break;
 
                     case FieldInfo field:
@@ -400,7 +402,10 @@ private MemberData AssembleMembers(Type type, BindingFlags memberBinding)
             var methodDatas = new JsonDictionary<string, MethodData>();
             foreach (KeyValuePair<string, List<MethodInfo>> method in methods)
             {
-                methodDatas[method.Key] = AssembleMethod(method.Value);
+                if (TryAssembleMethod(method.Value, out MethodData md))
+                {
+                    methodDatas[method.Key] = md;
+                }
             }
 
             return new MemberData()
@@ -457,35 +462,61 @@ private EventData AssembleEvent(EventInfo e)
             };
         }
 
-        private string[] AssembleConstructor(ConstructorInfo ctor)
+        // private string[] AssembleConstructor(ConstructorInfo ctor)
+        private bool TryAssembleConstructor(ConstructorInfo ctor, out string[] result)
         {
+            bool success = false;
             var parameters = new List<string>();
-            foreach (ParameterInfo param in ctor.GetParameters())
+            try
+            {
+                foreach (ParameterInfo param in ctor.GetParameters())
+                {
+                    parameters.Add(TypeNaming.GetFullTypeName(param.ParameterType));
+                }
+
+                result = parameters.ToArray();
+                success = true;
+            }
+            catch
             {
-                parameters.Add(TypeNaming.GetFullTypeName(param.ParameterType));
+                result = null;
             }
 
-            return parameters.ToArray();
+            return success;
         }
 
-        private MethodData AssembleMethod(List<MethodInfo> methodOverloads)
+        // private MethodData AssembleMethod(List<MethodInfo> methodOverloads)
+        private bool TryAssembleMethod(List<MethodInfo> methodOverloads, out MethodData result)
         {
             var overloads = new List<string[]>();
             foreach (MethodInfo overload in methodOverloads)
             {
                 var parameters = new List<string>();
-                foreach (ParameterInfo param in overload.GetParameters())
+                try
                 {
-                    parameters.Add(TypeNaming.GetFullTypeName(param.ParameterType));
+                    foreach (ParameterInfo param in overload.GetParameters())
+                    {
+                        parameters.Add(TypeNaming.GetFullTypeName(param.ParameterType));
+                    }
+                    overloads.Add(parameters.ToArray());
                 }
-                overloads.Add(parameters.ToArray());
+                catch
+                {
+                }
+            }
+
+            if (overloads.Count == 0)
+            {
+                result = null;
+                return false;
             }
 
-            return new MethodData()
+            result =  new MethodData()
             {
                 ReturnType = TypeNaming.GetFullTypeName(methodOverloads[0].ReturnType),
                 OverloadParameters = overloads.ToArray()
             };
+            return true;
         }
 
         private bool IsAssemblyPathExcluded(string path)
diff --git a/PSCompatibilityCollector/Tests/UtilityApi.Tests.ps1 b/PSCompatibilityCollector/Tests/UtilityApi.Tests.ps1
index 444adffc5..0ebcec746 100644
--- a/PSCompatibilityCollector/Tests/UtilityApi.Tests.ps1
+++ b/PSCompatibilityCollector/Tests/UtilityApi.Tests.ps1
@@ -38,6 +38,7 @@ Describe "Type name serialization" {
         @{ InputType = [System.Collections.Generic.Dictionary`2+Enumerator[string, object]]; ExpectedName = "System.Collections.Generic.Dictionary``2+Enumerator[System.String,System.Object]" }
         @{ InputType = [System.Collections.Concurrent.ConcurrentDictionary`2].GetMethod('ToArray').ReturnType; ExpectedName = "System.Collections.Generic.KeyValuePair``2[]" }
     ) {
+        param ( $InputType, $ExpectedName )
         $name = [Microsoft.PowerShell.CrossCompatibility.TypeNaming]::GetFullTypeName($InputType)
         $name | Should -BeExactly $ExpectedName
     }
@@ -81,6 +82,7 @@ Describe "Type accelerator expansion" {
         @{ Raw = "[object]"; Expanded = "System.Object" }
     ) -Test {
 
+        param ( $Raw, $Expanded )
         $typeName = Get-TypeNameAstFromScript -Script $Raw
 
         $canonicalName = [Microsoft.PowerShell.CrossCompatibility.TypeNaming]::GetCanonicalTypeName($typeAccelerators, $typeName)