diff --git a/dotnet/src/dotnetcore/GxClasses.Web/Middleware/HandlerFactory.cs b/dotnet/src/dotnetcore/GxClasses.Web/Middleware/HandlerFactory.cs index d072c5d27..7e03dcc82 100644 --- a/dotnet/src/dotnetcore/GxClasses.Web/Middleware/HandlerFactory.cs +++ b/dotnet/src/dotnetcore/GxClasses.Web/Middleware/HandlerFactory.cs @@ -270,7 +270,7 @@ internal static Type GetHandlerType(string assemblyName, string className) try { - objType = GeneXus.Metadata.ClassLoader.FindType(assemblyName, className, null); + objType = GeneXus.Metadata.ClassLoader.FindType(assemblyName, className, null, false, true); if (objType == null) objType = Assembly.Load(new AssemblyName(assemblyName)).GetType(className); diff --git a/dotnet/src/dotnetframework/GxClasses/Helpers/GXMetadata.cs b/dotnet/src/dotnetframework/GxClasses/Helpers/GXMetadata.cs index b3b76cb43..5a705e4d2 100644 --- a/dotnet/src/dotnetframework/GxClasses/Helpers/GXMetadata.cs +++ b/dotnet/src/dotnetframework/GxClasses/Helpers/GXMetadata.cs @@ -70,13 +70,13 @@ static public void Execute(object instance, string mthd, Object[] args) } } static ConcurrentDictionary loadedAssemblies = new ConcurrentDictionary(); - static public Type FindType(string defaultAssemblyName, string clss, Assembly defaultAssembly, bool ignoreCase = false) + static public Type FindType(string defaultAssemblyName, string clss, Assembly defaultAssembly, bool ignoreCase = false, bool ignoreError=false) { - return FindType(defaultAssemblyName, string.Empty, clss, defaultAssembly, ignoreCase); + return FindType(defaultAssemblyName, string.Empty, clss, defaultAssembly, ignoreCase, ignoreError); } //ns = kb Namespace //clssWithoutNamespace = fullname genexus object (includes module), p.e. genexus.sd.synchronization.offlineeventreplicator - static public Type FindType(string defaultAssemblyName, string ns, string clssWithoutNamespace, Assembly defaultAssembly, bool ignoreCase = false) + static public Type FindType(string defaultAssemblyName, string ns, string clssWithoutNamespace, Assembly defaultAssembly, bool ignoreCase = false, bool ignoreError = false) { string clss = string.IsNullOrEmpty(ns) ? clssWithoutNamespace : string.Format("{0}.{1}", ns, clssWithoutNamespace); @@ -143,7 +143,7 @@ static public Type FindType(string defaultAssemblyName, string ns, string clssWi { if (ns != appNS) { - return FindType(defaultAssemblyName, appNS, clssWithoutNamespace, defaultAssembly); + return FindType(defaultAssemblyName, appNS, clssWithoutNamespace, defaultAssembly, ignoreCase, ignoreError); } } if (objType == null) @@ -168,7 +168,7 @@ static public Type FindType(string defaultAssemblyName, string ns, string clssWi defaultAssemblyName = parts[1]; clss = parts[0]; } - return FindType(defaultAssemblyName, string.Empty, clss, defaultAssembly); + return FindType(defaultAssemblyName, string.Empty, clss, defaultAssembly, ignoreCase, ignoreError); } } @@ -207,8 +207,13 @@ static public Type FindType(string defaultAssemblyName, string ns, string clssWi } if (objType == null) { - GXLogging.Error(log, "Failed to load type: " + clss + " from currentdomain"); - throw new GxClassLoaderException("Failed to load type: " + clss); + if (ignoreError) + GXLogging.Warn(log, "Failed to load type: " + clss + " from currentdomain"); + else + { + GXLogging.Error(log, "Failed to load type: " + clss + " from currentdomain"); + throw new GxClassLoaderException("Failed to load type: " + clss); + } } return objType;