2013-03-05 23 views
5

Auf meinem Computer lief alles gut und schön, aber als ich das Programm auf einem anderen Windows7 Computer ausprobierte, bekam ich eine System.UriFormatException: Ungültiger URI: Es gibt eine ungültige Sequenz in der Zeichenfolge. Auf dem folgenden Code: Uri.UnescapeDataString(section);Uri.UnescapeDataString schlägt auf einem anderen Computer fehl

Zuerst dachte ich, der zweite Computer unterschiedliche Daten aus dem Entwickler-PC wurde empfangen, so kopierte ich die HTML-Zeichenfolge, die in eine Datei versagen und reduziert meinen Code dazu:

static void Err(string s){/*Picked up by external logging*/} 

private static void GetValue() 
{ 
    try 
    { 
     var html = File.ReadAllText("ld.txt"); 

     //Retrieve section we want 
     var section = Regex.Match(
      html, 
      "etc_etc(.*): ", 
      RegexOptions.Singleline) 
           .Groups[1].ToString(); 

     Uri.UnescapeDataString(section); 
    } 
    catch (Exception ex) 
    { 
     Err(ex.ToString()); 
    } 
} 

Funktioniert auf dem Computer dev, aber der zweite Computer empfängt die Ausnahme erneut. Sie laden beide die exakt gleiche html aus der gleichen ld.txt Datei und machen dann genau dasselbe mit ihr .. und beide PCs sind x64 Win7. Was gibt?

+0

.NET-Version und Patches? Es ist möglich, dass einer gepatcht wird und der andere nicht ... Und was ist die Zeile in der Datei ld.txt, die den Fehler erzeugt? – nhahtdh

+0

Wurde nicht überprüft, aber die Anwendung wurde mit 4.0 erstellt. Ich werde sehen, ob die Aktualisierung hilft (wenn es welche gibt.) – natli

+0

Könnte es ein Textcodierungsproblem sein? Ein Computer hat eine andere Standardtextcodierung als die andere? Haben Sie überprüft, dass die Zeichenfolge "section" auf Computer 1 genau der "section" auf Computer 2 entspricht? Beide laufen die gleiche Version von .NET? –

Antwort

8

UnescapeDataString erscheint zwischen CLR 4.0 und 4.5

Ich kann dies reproduzieren auf zwei Maschinen mit verschiedenen Versionen von .NET installiert (obwohl kompilierte Ziel .NET 4.0) geändert zu haben.

Haben Sie vielleicht VS 2012 auf Ihrem Rechner (und daher. NET 4.5) und nur. NET 4 auf dem anderen Computer?

Dieser Code löst eine Ausnahme auf .Net 4.0, geht auf .Net 4,5

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine("CLR version: " + Environment.Version); 
     Console.WriteLine(Uri.UnescapeDataString("%")); 
    } 
} 
+0

Danke für die Beantwortung so lange nach der Tatsache. Ich habe tatsächlich vs2012 auf meinem Rechner und nicht auf dem anderen Computer, also werde ich weitermachen und davon ausgehen, dass es das verursacht hat. – natli

+1

Gern geschehen. Ich traf das gleiche Problem, also postete dies hier für den größeren guten :) – Timje

+1

Dies war sehr hilfreich. In der Tat musste ich nur [.Net Framework 4.5.1 Developer Pack] installieren (http://www.microsoft.com/en-us/download/details.aspx?id=40772) und dieses Problem wurde behoben. Alles einschließlich Konfigurationen, Doppelflucht usw. waren ähnlich, aber dieses Problem ging nicht. Deine Lösung hat es geschafft. Vielen Dank! – amitthk

Verwandte Themen