C# WinCE试图在.NET CF 2.0中查找另一个异常的消息文本时引发FileNotFoundException
我有一个愚蠢的WinCE应用程序,我只是试图强制执行一个异常,并从部署到设备的System.SR.dll检索异常消息 引发异常的代码如下所示:C# WinCE试图在.NET CF 2.0中查找另一个异常的消息文本时引发FileNotFoundException,c#,exception,compact-framework,.net-2.0,windows-ce,C#,Exception,Compact Framework,.net 2.0,Windows Ce,我有一个愚蠢的WinCE应用程序,我只是试图强制执行一个异常,并从部署到设备的System.SR.dll检索异常消息 引发异常的代码如下所示: TcpClient client = new TcpClient("abcd", 1234); 但是,当SocketException尝试解析其消息时,它会抛出一个FileNotFoundException,其跟踪如下: 在System.Reflection.Assembly.InternalGetSatelliteTheAssembly()中 在Sy
TcpClient client = new TcpClient("abcd", 1234);
但是,当SocketException尝试解析其消息时,它会抛出一个FileNotFoundException,其跟踪如下:
在System.Reflection.Assembly.InternalGetSatelliteTheAssembly()中
在System.Reflection.Assembly.GetSatelliteTasembly()中
位于System.Resources.ResourceManager.InternalGetResourceSet()处
位于System.Resources.ResourceManager.GetString()处
位于System.Resources.ResourceManager.GetString()处
在System.SRSupport.hastring()中
在System.SRSupport.hastring()中
at System.SR.hastring()
在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_单击()
在System.Windows.Forms.Control.OnClick()中
在System.Windows.Forms.Button.OnClick()中
在System.Windows.Forms.ButtonBase.WnProc()中
在System.Windows.Forms.Control.\u 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");
}
在异常上放置断点
但是,我猜您的端口号超出范围。您是说
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");
}
在异常上放置断点
不过,我的猜测是,您的端口号超出了范围。我最终制定了一个新的解决方案,该解决方案似乎因某种原因而中断。我最终制定了一个新的解决方案,该解决方案似乎因某种原因而中断。是的。查看我的stacktrace,SocketException构造函数实际上抛出了一个未找到的文件异常:System.Net.Sockets.SocketException..ctor()。此外,这是紧凑型框架的一个特点。完整框架不必像这样查找它的异常消息。我知道
TcpClient
的重载允许您指定主机和端口,但也有一个版本不接受任何参数。我想以后可以加上。那个版本对你也有影响吗?有时一个版本不能工作,但另一个版本可以。如果没有抛出异常,那么我的测试将是无用的。我正在尝试抛出一个异常,以便确保加载正确的异常消息。目前还没有发生。查看我的stacktrace,SocketException构造函数实际上抛出了一个未找到的文件异常:System.Net.Sockets.SocketException..ctor()。此外,这是紧凑型框架的一个特点。完整框架不必像这样查找它的异常消息。我知道TcpClient
的重载允许您指定主机和端口,但也有一个版本不接受任何参数。我想以后可以加上。那个版本对你也有影响吗?有时一个版本不能工作,但另一个版本可以。如果没有抛出异常,那么我的测试将是无用的。我正在尝试抛出一个异常,以便确保加载正确的异常消息。目前这种情况还没有发生