当WinCE试图在.NET CF 2.0中查找另一个异常的消息文本时,抛出FileNotFoundException
本文关键字:消息 异常 另一个 文本 FileNotFoundException 抛出 查找 WinCE NET CF | 更新日期: 2023-09-27 18:28:39
我有一个愚蠢的WinCE应用程序,我只是试图强制执行异常,并从部署到设备的System.SR.dll中获取异常消息。
我抛出异常的代码如下:
TcpClient client = new TcpClient("abcd", 1234);
但是,当SocketException试图解析其消息时,它会抛出一个带有以下tacktrace的FileNotFoundException:
位于System.Reflection.Assembly.InteralGetSatelliteAssembly()位于System.Reflection.Assembly.GetSatelliteAssembly()位于System.Resources.ResourceManager.InteralGetResourceSet()位于System.Resources.ResourceManager.GetString()位于System.Resources.ResourceManager.GetString()位于System.SRSupport.HasString()位于System.SRSupport.HasString()位于System.SR.HasString()位于System.Net.SocketException.makeMessage()位于System.Net.Socket.SocketException.ctor()位于System.Net.Dns.RevolveInternal()位于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();
}
}
我最终制定了一个新的解决方案,由于某种原因,这个解决方案似乎坏了。
您是说TcpClient()
方法正在抛出异常,而您无法捕获它吗?
VS2008的IntelliSense只显示了在创建新的TcpClient()
实例时抛出的3个异常:
try {
TcpClient client = new TcpClient("abcd", 1234);
} catch (ArgumentNullException) {
Console.WriteLine("ArgumentNullException");
} catch (ArgumentOutOfRangeException) {
Console.WriteLine("ArgumentOutOfRangeException");
} catch (SocketException) {
Console.WriteLine("SocketException");
}
在异常上放置一个断点。
不过,我的猜测是,您的端口号超出了范围。