private static WrapperEngineLoadException WrapAssemblyLoaderException(
            Exception originalAssemblyLoaderException)
        {
            string       originalMessage = originalAssemblyLoaderException.Message;
            string       description;
            string       message;
            Architecture osArchitecture = RuntimeInformation.OSArchitecture;

            if ((osArchitecture == Architecture.X64 || osArchitecture == Architecture.X86) &&
                originalMessage.StartsWith("Couldn't load native assembly at "))
            {
                description = Strings.Engine_VcRedist2012And2015InstallationRequired;
                message     = JsErrorHelpers.GenerateEngineLoadErrorMessage(description, EngineName);
            }
            else
            {
                description = originalMessage;
                message     = JsErrorHelpers.GenerateEngineLoadErrorMessage(description, EngineName, true);
            }

            var wrapperEngineLoadException = new WrapperEngineLoadException(message, EngineName, EngineVersion,
                                                                            originalAssemblyLoaderException)
            {
                Description = description
            };

            return(wrapperEngineLoadException);
        }
Example #2
0
        private static WrapperEngineLoadException WrapTypeLoadException(
            TypeLoadException originalTypeLoadException)
        {
            string originalMessage = originalTypeLoadException.Message;
            string description;
            string message;

            Match errorMessageMatch = _interfaceAssemblyLoadErrorMessage.Match(originalMessage);

            if (errorMessageMatch.Success)
            {
                string assemblyFileName = errorMessageMatch.Groups["assemblyFileName"].Value;

                var           stringBuilderPool  = StringBuilderPool.Shared;
                StringBuilder descriptionBuilder = stringBuilderPool.Rent();
                descriptionBuilder.AppendFormat(CoreStrings.Engine_AssemblyNotFound, assemblyFileName);
                descriptionBuilder.Append(" ");
                if (assemblyFileName == DllName.V8LibCpp64Bit || assemblyFileName == DllName.V8LibCpp32Bit)
                {
                    descriptionBuilder.AppendFormat(CoreStrings.Engine_NuGetPackageInstallationRequired,
                                                    assemblyFileName == DllName.V8LibCpp64Bit ?
                                                    "JavaScriptEngineSwitcher.V8.Native.win-x64"
                                                        :
                                                    "JavaScriptEngineSwitcher.V8.Native.win-x86"
                                                    );
                    descriptionBuilder.Append(" ");
                    descriptionBuilder.Append(Strings.Engine_VcRedist2017InstallationRequired);
                }
                else
                {
                    descriptionBuilder.AppendFormat(CoreStrings.Common_SeeOriginalErrorMessage, originalMessage);
                }

                description = descriptionBuilder.ToString();
                stringBuilderPool.Return(descriptionBuilder);

                message = JsErrorHelpers.GenerateEngineLoadErrorMessage(description, EngineName);
            }
            else
            {
                description = originalMessage;
                message     = JsErrorHelpers.GenerateEngineLoadErrorMessage(description, EngineName, true);
            }

            var wrapperEngineLoadException = new WrapperEngineLoadException(message, EngineName, EngineVersion,
                                                                            originalTypeLoadException)
            {
                Description = description
            };

            return(wrapperEngineLoadException);
        }
Example #3
0
        private static WrapperEngineLoadException WrapTypeLoadException(
            TypeLoadException originalTypeLoadException)
        {
            string originalMessage = originalTypeLoadException.Message;
            string description;
            string message;

            Match errorMessageMatch = _libraryLoadErrorMessage.Match(originalMessage);

            if (errorMessageMatch.Success)
            {
                string assemblyFileName = errorMessageMatch.Groups["assemblyFileName"].Value;

                var           stringBuilderPool  = StringBuilderPool.Shared;
                StringBuilder descriptionBuilder = stringBuilderPool.Rent();
                descriptionBuilder.AppendFormat(CoreStrings.Engine_AssemblyNotFound, assemblyFileName);
                descriptionBuilder.Append(" ");

                string packageName;
                if (_nativeAssemblyPackageMap.TryGetValue(assemblyFileName, out packageName))
                {
                    descriptionBuilder.AppendFormat(CoreStrings.Engine_NuGetPackageInstallationRequired, packageName);
                }
                else
                {
                    descriptionBuilder.AppendFormat(CoreStrings.Common_SeeOriginalErrorMessage, originalMessage);
                }

                description = descriptionBuilder.ToString();
                stringBuilderPool.Return(descriptionBuilder);

                message = JsErrorHelpers.GenerateEngineLoadErrorMessage(description, EngineName);
            }
            else
            {
                description = originalMessage;
                message     = JsErrorHelpers.GenerateEngineLoadErrorMessage(description, EngineName, true);
            }

            var wrapperEngineLoadException = new WrapperEngineLoadException(message, EngineName, EngineVersion,
                                                                            originalTypeLoadException)
            {
                Description = description
            };

            return(wrapperEngineLoadException);
        }
        private static WrapperEngineLoadException WrapDllNotFoundException(
            DllNotFoundException originalDllNotFoundException)
        {
            string originalMessage = originalDllNotFoundException.Message;
            string description;
            string message;
            bool   isMonoRuntime = Utils.IsMonoRuntime();

            if ((isMonoRuntime && originalMessage == DllName.Universal) ||
                originalMessage.ContainsQuotedValue(DllName.Universal))
            {
                const string buildInstructionsUrl = "https://github.com/pauldotknopf/vroomjs-core#maclinux";
                bool         quoteDescription     = false;

                var           stringBuilderPool  = StringBuilderPool.Shared;
                StringBuilder descriptionBuilder = stringBuilderPool.Rent();
                if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                {
                    Architecture osArchitecture = RuntimeInformation.OSArchitecture;
                    if (osArchitecture == Architecture.X64 || osArchitecture == Architecture.X86)
                    {
                        descriptionBuilder.Append(originalMessage);
                        quoteDescription = true;
                    }
                    else
                    {
                        descriptionBuilder.AppendFormat(CoreStrings.Engine_ProcessorArchitectureNotSupported,
                                                        osArchitecture.ToString().ToLowerInvariant());
                    }
                }
                else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ||
                         RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
                {
                    descriptionBuilder.AppendFormat(CoreStrings.Engine_AssemblyNotFound, DllName.ForUnix);
                    descriptionBuilder.Append(" ");
                    descriptionBuilder.AppendFormat(Strings.Engine_BuildNativeAssemblies, DllName.ForUnix,
                                                    "libv8.so." + EngineVersion, buildInstructionsUrl);
                }
                else
                {
                    descriptionBuilder.Append(CoreStrings.Engine_OperatingSystemNotSupported);
                }

                description = descriptionBuilder.ToString();
                stringBuilderPool.Return(descriptionBuilder);

                message = JsErrorHelpers.GenerateEngineLoadErrorMessage(description, EngineName,
                                                                        quoteDescription);
            }
            else
            {
                description = originalMessage;
                message     = JsErrorHelpers.GenerateEngineLoadErrorMessage(description, EngineName, true);
            }

            var wrapperEngineLoadException = new WrapperEngineLoadException(message, EngineName, EngineVersion,
                                                                            originalDllNotFoundException)
            {
                Description = description
            };

            return(wrapperEngineLoadException);
        }