2013-03-05 18 views
5

Sul mio computer di sviluppo tutto funzionava bene e dandy ma quando ho testato il programma su un altro computer Windows7 ricevevo un System.UriFormatException: URI non valido: C'è una sequenza non valida nella stringa. Sul seguente codice: Uri.UnescapeDataString(section);Uri.UnescapeDataString non riesce su computer diverso

In un primo momento ho pensato che il secondo computer stava ricevendo dati diversi dal pc dev, quindi ho copiato la stringa HTML che stava venendo a mancare in un file e ridotto il mio codice a questo:

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

Funziona bene sul pc di sviluppo, ma il secondo computer riceve nuovamente l'eccezione. Stanno entrambi caricando lo stesso codice html dallo stesso identico file ld.txt e poi facendo esattamente la stessa cosa con esso .. e entrambi i PC sono x64 Win7. Cosa dà?

+0

versione di .NET e le patch? È possibile che uno sia corretto e l'altro no ... E qual è la riga nel file ld.txt che produce l'errore? – nhahtdh

+0

Non verificato, ma l'applicazione è costruita con 4.0. Vedrò se l'aggiornamento aiuta (se ce ne sono.) – natli

+0

Potrebbe essere un problema di codifica del testo? Un computer ha una codifica di testo predefinita diversa dall'altra? Hai verificato che la 'sezione' di stringa sul computer 1 è esattamente la stessa di' section' sul computer 2? Entrambi eseguono la stessa versione di .NET? –

risposta

8

UnescapeDataString sembra essere cambiato tra CLR 4.0 e 4.5

posso riprodurre questo su due macchine con diverse versioni di .Net installate (anche se compilato a bersaglio .Net 4.0).

Avete forse VS 2012 sulla vostra macchina dev (e quindi su .Net 4.5) e solo su .Net 4 sull'altro computer?

Questo codice genera un'eccezione su .Net 4.0, passa sul Net 4,5

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

Grazie per aver risposto così tanto tempo dopo il fatto. In effetti, ho vs2012 sulla mia macchina di sviluppo e non sull'altro computer, quindi vado avanti e presumo che sia ciò che l'ha causato. – natli

+1

Prego. Ho colpito lo stesso problema, quindi ho postato questo qui per il bene maggiore :) – Timje

+1

Questo è stato molto utile. Infatti, avevo solo bisogno di installare [.Net Framework 4.5.1 Developer Pack] (http://www.microsoft.com/en-us/download/details.aspx?id=40772) e questo problema è stato risolto. Tutto ciò che includeva configurazioni, doppia fuga ecc. Erano simili, ma questo problema non andava. La tua soluzione l'ha fatto. Grazie! – amitthk

Problemi correlati