diff options
Diffstat (limited to 'src/mscorlib/src/System/IO/FileLoadException.CoreCLR.cs')
-rw-r--r-- | src/mscorlib/src/System/IO/FileLoadException.CoreCLR.cs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/mscorlib/src/System/IO/FileLoadException.CoreCLR.cs b/src/mscorlib/src/System/IO/FileLoadException.CoreCLR.cs new file mode 100644 index 0000000000..f6415670e3 --- /dev/null +++ b/src/mscorlib/src/System/IO/FileLoadException.CoreCLR.cs @@ -0,0 +1,43 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Globalization; +using System.Runtime.InteropServices; +using System.Runtime.CompilerServices; +using System.Security; + +namespace System.IO +{ + public partial class FileLoadException + { + // Do not delete: this is invoked from native code. + private FileLoadException(string fileName, string fusionLog, int hResult) + : base(null) + { + HResult = hResult; + FileName = fileName; + FusionLog = fusionLog; + _message = FormatFileLoadExceptionMessage(FileName, HResult); + } + + internal static string FormatFileLoadExceptionMessage(string fileName, int hResult) + { + string format = null; + GetFileLoadExceptionMessage(hResult, JitHelpers.GetStringHandleOnStack(ref format)); + + string message = null; + GetMessageForHR(hResult, JitHelpers.GetStringHandleOnStack(ref message)); + + return string.Format(CultureInfo.CurrentCulture, format, fileName, message); + } + + [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)] + [SuppressUnmanagedCodeSecurity] + private static extern void GetFileLoadExceptionMessage(int hResult, StringHandleOnStack retString); + + [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)] + [SuppressUnmanagedCodeSecurity] + private static extern void GetMessageForHR(int hresult, StringHandleOnStack retString); + } +} |