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); }
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); }
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/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); }