2013-03-05 77 views
5

在我的開發計算機上,一切正常,工作正常,但是當我在不同的Windows7計算機上測試該程序時,我得到一個System.UriFormatException無效的URI:字符串中存在無效序列。在下面的代碼:Uri.UnescapeDataString(section);Uri.UnescapeDataString在另一臺計算機上失敗

起初我以爲第二臺計算機從開發PC接收不同的數據,所以我複製這是沒有一個文件的HTML字符串和我的代碼減少到這一點:

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

在dev pc上正常工作,但第二臺計算機再次收到異常。他們都從完全相同的ld.txt文件加載完全相同的html文件,然後用它做同樣的事情......並且這兩臺PC都是x64 Win7。是什麼賦予了?

+0

通過.NET版本和補丁?有可能是一個補丁,另一個不是...... ld.txt中產生錯誤的行是什麼? – nhahtdh 2013-03-05 23:22:46

+0

沒有檢查,但應用程序是用4.0構建的。我會看看更新是否有幫助(如果有的話)。 – natli 2013-03-05 23:23:45

+0

它可能是文本編碼問題嗎?一臺計算機具有不同於其他默認文本編碼的編碼?你是否證實了計算機1上的字符串「section」與計算機2上的「section」完全相同?兩者都運行相同版本的.NET? – 2013-03-05 23:24:11

回答

8

UnescapeDataString出現CLR 4.0和4.5

我可以安裝不同版本的.NET重現此兩臺機器上(即使編譯成目標.NET 4.0)之間發生了變化。

你可能在你的開發機器上安裝了VS 2012(因此.Net 4.5),而在另一臺計算機上只安裝了.Net 4?

此代碼拋出的.NET 4.0個例外,在.NET 4.5

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

感謝您回答這麼長時間後的事實。我確實在我的開發機器上有vs2012,而不是在其他計算機上,所以我會繼續前進,並假設這是造成它的原因。 – natli 2013-06-12 18:49:15

+1

不客氣。我碰到同樣的問題,所以發佈這裏更好的:) – Timje 2013-06-13 08:53:51

+1

這是非常有幫助的。實際上,我只需要安裝[.Net Framework 4.5.1開發包](http://www.microsoft.com/en-us/download/details.aspx?id=40772)並解決了此問題。包括配置,雙轉義等在內的所有內容都是類似的,但這個問題還沒有解決。你的解決方案做到了。謝謝! – amitthk 2015-11-11 03:58:54

相關問題