2012-03-21 7 views
1

私は、例外を強制してSystem.SRから例外メッセージを取得しようとしている愚かなWinCEアプリケーションを持っています。デバイスに展開されるdll。WinCEが.NET CF 2.0の別の例外のメッセージテキストを見つけようとすると、FileNotFoundExceptionがスローされる

私は、次のされて例外をスローしたコード:

TcpClient client = new TcpClient("abcd", 1234); 

しかしのSocketExceptionが、それは、メッセージの解決しようとすると、それは次のようtacktraceを設定してFileNotFoundExceptionをスロー:システムで

.Reflection.Assembly.InternalGetSatelliteAssembly()at System.Reflection.Assembly.GetSatelliteAssembly() at System.ResourcesManager.InternalGetResourceSet() at System.Resources.Resour System.Net.SocketsでSystem.SRSupport.HasStringで)(System.SRSupport.HasStringで)(System.Resources.ResourceManager.GetStringで)( ceManager.GetString()System.SR.HasStringで () System.Net.SocketsでSystem.Net.Dns.GetHostEntry() でSystem.Net.Dns.ResolveInternalでSystem.Net.Sockets.SocketException..ctorで.SocketException.makeMessage() () () 。 TcpClient.Connect() at System.Net.Sockets.TcpClient..ctor() at WinCeMessage.Com.SocketBlaster.Blast() at WinCeMessage.Form1.button1_Click() at System.Windows.Forms.Control.OnClick () にSystem.Windows.Form Microsoft.AGL.Forms.EVL.EnterMainLoopでSystem.Windows.Forms.Control._InternalWnProcでs.Button.OnClick System.Windows.Forms.ButtonBase.WnProcで() () () ()システムで 。 WinCeMessage.Program.MainでWindows.Forms.Application.Run() ()

(私は信じている)これらのメッセージが保存されたファイルがデバイスにデプロイさSystem.SR.dll、あります私はVisual Studioでそれを実行します。エミュレータをドッキングし、ファイルが存在することを確認しました。

これは例外をスローSystem.SR.dllからのコードです:あなたはTcpClient()メソッドが例外を投げている、あなたはそれをキャッチすることができません

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

答えて

1

私は何かの理由で壊れていたような新しいソリューションを作り上げました。

0

を言っていますか?

try { 
    TcpClient client = new TcpClient("abcd", 1234); 
} catch (ArgumentNullException) { 
    Console.WriteLine("ArgumentNullException"); 
} catch (ArgumentOutOfRangeException) { 
    Console.WriteLine("ArgumentOutOfRangeException"); 
} catch (SocketException) { 
    Console.WriteLine("SocketException"); 
} 

置き、あなたの例外にブレークポイント:

はVS2008のIntelliSenseが新しいTcpClient()インスタンスを作成したときにスローされているだけ3の例外を示しています。

私の推測では、ポート番号が範囲外です。

+0

はい。私のstacktraceを見て、SocketExceptionコンストラクタは実際には例外が見つからないファイルをスローします:System.Net.Sockets.SocketException..ctor()。また、これはコンパクトなフレームワークに特有のものです。完全なフレームワークは、このような例外メッセージを参照する必要はありません – MStodd

+0

私はこのTcpClientのオーバーロードがホストとポートを指定できることを知っていますが、引数を受け付けないバージョンもあります。私は後でそれを加えることができると思います。あなたもそのバージョンの爆弾ですか?時には1つのバージョンは動作しませんが、別のバージョンは動作します。 – jp2code

+0

例外がスローされなかった場合、私のテストは役に立たなくなります。私は正しい例外メッセージがロードされることを保証できるように、例外がスローされるようにしようとしています。現在、それは起こっていない – MStodd

関連する問題