2013-03-05 23 views
5

Na moim komputerze dev wszystko działało dobrze i elegancko, ale kiedy testowałem program na innym komputerze z Windows7 otrzymywałem System.UriFormatException: Nieprawidłowy identyfikator URI: W łańcuchu jest niepoprawna sekwencja. Na poniższym kodzie: Uri.UnescapeDataString(section);Uri.UnescapeDataString kończy się niepowodzeniem na innym komputerze

Na początku myślałem, że drugi komputer otrzymywała różne dane z komputera dev, więc skopiowane ciąg HTML, który był zepsuty do pliku i zmniejszona mój kod to:

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

Działa poprawnie na komputerze PC, ale drugi komputer ponownie otrzymuje wyjątek. Oba ładują dokładnie ten sam html z tego samego pliku ld.txt, a następnie robią dokładnie to samo z nim .. i oba komputery to Win7 x64. Co daje?

+0

wersję .NET i łatek? Jest możliwe, że jeden jest załatany, a drugi nie ... I jaka jest linia w pliku ld.txt, który powoduje błąd? – nhahtdh

+0

Nie sprawdzono tego, ale aplikacja została zbudowana w wersji 4.0. Zobaczę, czy aktualizacja pomaga (jeśli są jakieś). – natli

+0

Czy może to być problem z kodowaniem tekstu? Jeden komputer ma inne domyślne kodowanie tekstu niż inne? Czy zweryfikowaliście, że ciąg 'section' na komputerze 1 jest dokładnie taki sam jak" sekcja "na komputerze 2? Oba działają w tej samej wersji .NET? –

Odpowiedz

8

UnescapeDataString wydaje się zmieniły między CLR 4.0 i 4.5

mogę odtworzyć to na dwóch komputerach z różnymi wersjami .NET zainstalowanych (choć skompilowany kierować .NET 4.0).

Czy może masz VS 2012 na swojej maszynie dev (a więc .Net 4.5) i tylko .Net 4 na drugim komputerze?

Ten kod zgłasza wyjątek w .NET 4.0, przechodzi na .NET 4.5

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

Dzięki za odpowiedź tak długo po fakcie. Rzeczywiście mam vs2012 na moim komputerze, a nie na drugim komputerze, więc zamierzam iść dalej i założyć, że to właśnie spowodowało. – natli

+1

Nie ma za co. Trafiłem na ten sam problem, więc wysłałem to tutaj dla większego dobra :) – Timje

+1

To było bardzo pomocne. W rzeczywistości wystarczy zainstalować pakiet deweloperski [.Net Framework 4.5.1] (http://www.microsoft.com/en-us/download/details.aspx?id=40772) i ten problem został rozwiązany. Wszystko, w tym konfiguracje, podwójne ucieczki itp. Były podobne, jednak problem ten nie występował. Twoje rozwiązanie to zrobiło. Dzięki! – amitthk

Powiązane problemy