6

私の開発用コンピューターではすべてが正常に機能していましたが、別の Windows7 コンピューターでプログラムをテストすると、「無効な URI System.UriFormatException:文字列に無効なシーケンスがあります」というメッセージが表示されました。次のコードで:Uri.UnescapeDataString(section);

最初は、2 台目のコンピューターが開発用 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());
    }
}

開発用 PC では正常に動作しますが、2 番目のコンピューターは再び例外を受け取ります。どちらもまったく同じファイルからまったく同じ html をロードし、ld.txtそれを使用してまったく同じことを行っています..両方の PC は x64 Win7 です。何を与える?

4

1 に答える 1

9

UnescapeDataString は、CLR 4.0 と 4.5 の間で変更されたようです

異なるバージョンの.Netがインストールされている2台のマシンでこれを再現できます(ターゲット.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("%"));
    }
}
于 2013-06-12T11:04:16.513 に答える