当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();
    }
}

当WinCE试图在.NET CF 2.0中查找另一个异常的消息文本时,抛出FileNotFoundException

我最终制定了一个新的解决方案,由于某种原因,这个解决方案似乎坏了。

您是说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");
}

在异常上放置一个断点。

不过,我的猜测是,您的端口号超出了范围。