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);
        }
Пример #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);
        }
Пример #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);
        }
Пример #4
0
        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/Microsoft/ChakraCore/wiki/Building-ChakraCore#{0}";
                const string manualInstallationInstructionsUrl =
                    "https://github.com/Taritsyn/JavaScriptEngineSwitcher/wiki/ChakraCore#{0}";
                Architecture osArchitecture = RuntimeInformation.OSArchitecture;

                var           stringBuilderPool  = StringBuilderPool.Shared;
                StringBuilder descriptionBuilder = stringBuilderPool.Rent();
                if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                {
                    descriptionBuilder.AppendFormat(CoreStrings.Engine_AssemblyNotFound, DllName.ForWindows);
                    descriptionBuilder.Append(" ");
                    if (osArchitecture == Architecture.X64 || osArchitecture == Architecture.X86)
                    {
                        descriptionBuilder.AppendFormat(CoreStrings.Engine_NuGetPackageInstallationRequired,
                                                        Utils.Is64BitProcess() ?
                                                        "JavaScriptEngineSwitcher.ChakraCore.Native.win-x64"
                                                                :
                                                        "JavaScriptEngineSwitcher.ChakraCore.Native.win-x86"
                                                        );
                    }
                    else if (osArchitecture == Architecture.Arm)
                    {
                        descriptionBuilder.AppendFormat(CoreStrings.Engine_NuGetPackageInstallationRequired,
                                                        "JavaScriptEngineSwitcher.ChakraCore.Native.win-arm");
                    }
                    else
                    {
                        descriptionBuilder.AppendFormat(CoreStrings.Engine_NoNuGetPackageForProcessorArchitecture,
                                                        "JavaScriptEngineSwitcher.ChakraCore.Native.win*",
                                                        osArchitecture.ToString().ToLowerInvariant()
                                                        );
                        descriptionBuilder.Append(" ");
                        descriptionBuilder.AppendFormat(Strings.Engine_BuildNativeAssemblyForCurrentProcessorArchitecture,
                                                        DllName.ForWindows,
                                                        string.Format(buildInstructionsUrl, "windows")
                                                        );
                    }
                }
                else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
                {
                    descriptionBuilder.AppendFormat(CoreStrings.Engine_AssemblyNotFound, DllName.ForLinux);
                    descriptionBuilder.Append(" ");
                    if (isMonoRuntime)
                    {
                        descriptionBuilder.AppendFormat(Strings.Engine_ManualInstallationUnderMonoRequired,
                                                        "JavaScriptEngineSwitcher.ChakraCore.Native.linux-*",
                                                        string.Format(manualInstallationInstructionsUrl, "linux")
                                                        );
                    }
                    else
                    {
                        if (osArchitecture == Architecture.X64)
                        {
                            descriptionBuilder.AppendFormat(CoreStrings.Engine_NuGetPackageInstallationRequired,
                                                            "JavaScriptEngineSwitcher.ChakraCore.Native.linux-x64");
                        }
                        else
                        {
                            descriptionBuilder.AppendFormat(CoreStrings.Engine_NoNuGetPackageForProcessorArchitecture,
                                                            "JavaScriptEngineSwitcher.ChakraCore.Native.linux-*",
                                                            osArchitecture.ToString().ToLowerInvariant()
                                                            );
                            descriptionBuilder.Append(" ");
                            descriptionBuilder.AppendFormat(Strings.Engine_BuildNativeAssemblyForCurrentProcessorArchitecture,
                                                            DllName.ForLinux,
                                                            string.Format(buildInstructionsUrl, "linux")
                                                            );
                        }
                    }
                }
                else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
                {
                    descriptionBuilder.AppendFormat(CoreStrings.Engine_AssemblyNotFound, DllName.ForOsx);
                    descriptionBuilder.Append(" ");
                    if (isMonoRuntime)
                    {
                        descriptionBuilder.AppendFormat(Strings.Engine_ManualInstallationUnderMonoRequired,
                                                        "JavaScriptEngineSwitcher.ChakraCore.Native.osx-*",
                                                        string.Format(manualInstallationInstructionsUrl, "os-x")
                                                        );
                    }
                    else
                    {
                        if (osArchitecture == Architecture.X64)
                        {
                            descriptionBuilder.AppendFormat(CoreStrings.Engine_NuGetPackageInstallationRequired,
                                                            "JavaScriptEngineSwitcher.ChakraCore.Native.osx-x64");
                        }
                        else
                        {
                            descriptionBuilder.AppendFormat(CoreStrings.Engine_NoNuGetPackageForProcessorArchitecture,
                                                            "JavaScriptEngineSwitcher.ChakraCore.Native.osx-*",
                                                            osArchitecture.ToString().ToLowerInvariant()
                                                            );
                            descriptionBuilder.Append(" ");
                            descriptionBuilder.AppendFormat(Strings.Engine_BuildNativeAssemblyForCurrentProcessorArchitecture,
                                                            DllName.ForOsx,
                                                            string.Format(buildInstructionsUrl, "os-x")
                                                            );
                        }
                    }
                }
                else
                {
                    descriptionBuilder.Append(CoreStrings.Engine_OperatingSystemNotSupported);
                }

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

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

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

            return(wrapperEngineLoadException);
        }
        private WrapperException WrapJsException(OriginalException originalException)
        {
            WrapperException wrapperException;

            var originalScriptException = originalException as OriginalScriptException;

            if (originalScriptException != null)
            {
                WrapperScriptException wrapperScriptException;

                var originalRuntimeException = originalScriptException as OriginalRuntimeException;
                if (originalRuntimeException != null)
                {
                    WrapperRuntimeException wrapperRuntimeException;
                    if (originalRuntimeException is OriginalInterruptedException)
                    {
                        wrapperRuntimeException = new WrapperInterruptedException(originalScriptException.Message,
                                                                                  EngineName, _engineVersion, originalRuntimeException);
                    }
                    else
                    {
                        wrapperRuntimeException = new WrapperRuntimeException(originalScriptException.Message,
                                                                              EngineName, _engineVersion, originalRuntimeException);
                    }
                    wrapperRuntimeException.CallStack = originalRuntimeException.CallStack;

                    wrapperScriptException = wrapperRuntimeException;
                }
                else if (originalScriptException is OriginalCompilationException)
                {
                    wrapperScriptException = new WrapperCompilationException(originalScriptException.Message,
                                                                             EngineName, _engineVersion, originalScriptException);
                }
                else
                {
                    wrapperScriptException = new WrapperScriptException(originalScriptException.Message,
                                                                        EngineName, _engineVersion, originalScriptException);
                }

                wrapperScriptException.Type           = originalScriptException.Type;
                wrapperScriptException.DocumentName   = originalScriptException.DocumentName;
                wrapperScriptException.LineNumber     = originalScriptException.LineNumber;
                wrapperScriptException.ColumnNumber   = originalScriptException.ColumnNumber;
                wrapperScriptException.SourceFragment = originalScriptException.SourceFragment;

                wrapperException = wrapperScriptException;
            }
            else
            {
                if (originalException is OriginalUsageException)
                {
                    wrapperException = new WrapperUsageException(originalException.Message,
                                                                 EngineName, _engineVersion, originalException);
                }
                else if (originalException is OriginalEngineException)
                {
                    if (originalException is OriginalEngineLoadException)
                    {
                        wrapperException = new WrapperEngineLoadException(originalException.Message,
                                                                          EngineName, _engineVersion, originalException);
                    }
                    else
                    {
                        wrapperException = new WrapperEngineException(originalException.Message,
                                                                      EngineName, _engineVersion, originalException);
                    }
                }
                else if (originalException is OriginalFatalException)
                {
                    wrapperException = new WrapperFatalException(originalException.Message,
                                                                 EngineName, _engineVersion, originalException);
                }
                else
                {
                    wrapperException = new WrapperException(originalException.Message,
                                                            EngineName, _engineVersion, originalException);
                }
            }

            wrapperException.Description = originalException.Description;

            return(wrapperException);
        }
        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);
        }