У меня глупое приложение WinCE, где я просто пытаюсь вызвать исключение и получить сообщение об исключении из System.SR.dll, которое развертывается на устройстве.
Код, который я выбрасываю, является следующим:
TcpClient client = new TcpClient("abcd", 1234);
Но когда SocketException пытается разрешить свое сообщение, оно генерирует FileNotFoundException со следующей трассировкой:
в System.Reflection.Assembly.InternalGetSatellAssembly ()
в System.Reflection.Assembly.GetSatellAssembly ()
в System.Resources.ResourceManager.InternalGetResourceSet ()
в System.Resources.ResourceManager.GetString ()
в System.Resources.ResourceManager.GetString ()
в System.SRSupport.HasString ()
в System.SRSupport.HasString ()
в System.SR.HasString ()
в System.Net.Sockets.SocketException.makeMessage ()
в System.Net.Sockets.SocketException..ctor ()
в System.Net.Dns.ResolveInternal ()
в System.Net.Dns.GetHostEntry ()
в System.Net.Sockets.TcpClient.Connect ()
в System.Net.Sockets.TcpClient..ctor ()
в WinCeMessage.Com.SocketBlaster.Blast ()
в WinCeMessage.Form1.button1_Click ()
в System.Windows.Forms.Control.OnClick ()
в System.Windows.Forms.Button.OnClick ()
в System.Windows.Forms.ButtonBase.WnProc ()
в System.Windows.Forms.Control._InternalWnProc ()
в Microsoft.AGL.Forms.EVL.EnterMainLoop ()
в System.Windows.Forms.Application.Run ()
в WinCeMessage.Program.Main ()
(Полагаю) Файл, в котором хранятся эти сообщения, - это файл System.SR.dll, который развертывается на устройстве при запуске его в Visual Studio. Я установил эмулятор и проверил наличие файла.
Это код из System.SR.dll, выдающий исключение:
internal Assembly InternalGetSatelliteAssembly(CultureInfo culture, Version version, bool throwOnFileNotFound)
{
if (culture != null)
{
Assembly assembly = null;
AssemblyName name = this.GetName();
if (name != null)
{
name.Version = version;
name.CultureInfo = culture;
if (name.Name != null)
{
name.Name = string.Concat(name.Name, ".resources");
name.CodeBase = null;
}
try
{
StackCrawlMark stackCrawlMark = StackCrawlMark.LookForMyCaller;
assembly = Assembly.BCL_System_Reflection_Assembly_LoadFromName(name, false, null, ref stackCrawlMark);
}
catch (IOException oException)
{
assembly = null;
}
if (assembly != null)
{
if (assembly == this)
{
if (!throwOnFileNotFound)
{
return null;
}
else
{
throw new FileNotFoundException();
}
}
}
else
{
if (!throwOnFileNotFound)
{
return null;
}
else
{
throw new FileNotFoundException();
}
}
}
return assembly;
}
else
{
throw new ArgumentNullException();
}
}