3 // Copyright (c) Microsoft Corporation. All rights reserved.
6 /*============================================================
8 ** Class: FileLoadException
10 ** <OWNER>[....]</OWNER>
11 ** <OWNER>[....]</OWNER>
14 ** Purpose: Exception for failure to load a file that was successfully found.
17 ===========================================================*/
20 using System.Globalization;
21 using System.Runtime.Serialization;
22 using System.Runtime.InteropServices;
23 using System.Runtime.CompilerServices;
24 using System.Security;
25 using System.Security.Permissions;
26 using System.Runtime.Versioning;
27 using SecurityException = System.Security.SecurityException;
32 [System.Runtime.InteropServices.ComVisible(true)]
33 public class FileLoadException : IOException {
35 private String _fileName; // the name of the file we could not load.
36 private String _fusionLog; // fusion log (when applicable)
38 public FileLoadException()
39 : base(Environment.GetResourceString("IO.FileLoad")) {
40 SetErrorCode(__HResults.COR_E_FILELOAD);
43 public FileLoadException(String message)
45 SetErrorCode(__HResults.COR_E_FILELOAD);
48 public FileLoadException(String message, Exception inner)
49 : base(message, inner) {
50 SetErrorCode(__HResults.COR_E_FILELOAD);
53 public FileLoadException(String message, String fileName) : base(message)
55 SetErrorCode(__HResults.COR_E_FILELOAD);
59 public FileLoadException(String message, String fileName, Exception inner)
60 : base(message, inner) {
61 SetErrorCode(__HResults.COR_E_FILELOAD);
65 public override String Message
73 private void SetMessageField()
76 _message = FormatFileLoadExceptionMessage(_fileName, HResult);
79 public String FileName {
80 get { return _fileName; }
83 #if FEATURE_LEGACYNETCF
84 // override Data property to populate FileLoadException with Hresult
85 public override System.Collections.IDictionary Data {
86 [System.Security.SecuritySafeCritical]
88 var _data = base.Data;
89 if (CompatibilitySwitches.IsAppEarlierThanWindowsPhone8 && !_data.Contains("HResult"))
91 _data.Add("HResult", HResult);
96 #endif //FEATURE_LEGACYNETCF
98 public override String ToString()
100 String s = GetType().FullName + ": " + Message;
102 if (_fileName != null && _fileName.Length != 0)
103 s += Environment.NewLine + Environment.GetResourceString("IO.FileName_Name", _fileName);
105 if (InnerException != null)
106 s = s + " ---> " + InnerException.ToString();
108 if (StackTrace != null)
109 s += Environment.NewLine + StackTrace;
118 s+=Environment.NewLine;
119 s+=Environment.NewLine;
123 catch(SecurityException)
127 #endif // FEATURE_FUSION
132 protected FileLoadException(SerializationInfo info, StreamingContext context) : base (info, context) {
133 // Base class constructor will check info != null.
135 _fileName = info.GetString("FileLoad_FileName");
139 _fusionLog = info.GetString("FileLoad_FusionLog");
148 private FileLoadException(String fileName, String fusionLog,int hResult)
151 SetErrorCode(hResult);
152 _fileName = fileName;
153 _fusionLog=fusionLog;
158 public String FusionLog {
159 [System.Security.SecuritySafeCritical] // auto-generated
160 [SecurityPermissionAttribute( SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlEvidence | SecurityPermissionFlag.ControlPolicy)]
161 get { return _fusionLog; }
163 #endif // FEATURE_FUSION
165 #if FEATURE_SERIALIZATION
166 [System.Security.SecurityCritical] // auto-generated_required
167 public override void GetObjectData(SerializationInfo info, StreamingContext context) {
168 // Serialize data for our base classes. base will verify info != null.
169 base.GetObjectData(info, context);
171 // Serialize data for this class
172 info.AddValue("FileLoad_FileName", _fileName, typeof(String));
176 info.AddValue("FileLoad_FusionLog", FusionLog, typeof(String));
178 catch (SecurityException)
184 [System.Security.SecuritySafeCritical] // auto-generated
185 internal static String FormatFileLoadExceptionMessage(String fileName,
189 return string.Format (CultureInfo.InvariantCulture, "Could not load file or assembly '{0}' or one of its dependencies", fileName);
191 string format = null;
192 GetFileLoadExceptionMessage(hResult, JitHelpers.GetStringHandleOnStack(ref format));
194 string message = null;
195 GetMessageForHR(hResult, JitHelpers.GetStringHandleOnStack(ref message));
197 return String.Format(CultureInfo.CurrentCulture, format, fileName, message);
201 [System.Security.SecurityCritical] // auto-generated
202 [ResourceExposure(ResourceScope.None)]
203 [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
204 [SuppressUnmanagedCodeSecurity]
205 private static extern void GetFileLoadExceptionMessage(int hResult, StringHandleOnStack retString);
207 [System.Security.SecurityCritical] // auto-generated
208 [ResourceExposure(ResourceScope.None)]
209 [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
210 [SuppressUnmanagedCodeSecurity]
211 private static extern void GetMessageForHR(int hresult, StringHandleOnStack retString);