Bir dev makine üzerinde VS2012 Premium yüklendikten sonra birim sınaması başarısız oldu, bu nedenle geliştirici sorunu giderdi. Değişiklikler TeamCity'ye aktarıldığında, birim testi başarısız oldu. Proje, VS2012 ile uyumlu olacak şekilde yükseltilmekte olan çözüm dosyası dışında değişmedi. Yine de, Uri.ToString
numaralı telefonu arayarak unicode karakterleri kaçınılan bir soruna sorunu çözdüm. Aşağıdaki kod, davranışı çoğaltır. VS2012 yüklü olmayan bir makinede VS2010 bu RunningSystem.Uri.ToString davranışı, VS2012 yüklendikten sonra değişiklik
Imports NUnit.Framework
<TestFixture()>
Public Class UriTest
<Test()>
Public Sub UriToStringUrlDecodes()
Dim uri = New Uri("http://www.example.org/test?helloworld=foo%B6bar")
Assert.AreEqual("http://www.example.org/test?helloworld=foo¶bar", uri.ToString())
End Sub
End Class
başarısız yüklü VS2012 ile bir makinede VS2010 bu çalışan yerine geldi. Her ikisi de NuGet'in en son NCrunch ve NUnit versiyonunu kullanıyor. Başarısız assert gelen
mesajlar,
Expected string length 46 but was 48. Strings differ at index 42.
Expected: "http://www.example.org/test?helloworld=foo¶bar"
But was: "http://www.example.org/test?helloworld=foo%B6bar"
-----------------------------------------------------^
hem .NET 4. ve .NET 4.5 için MSDN üzerine dokümantasyon ToString
bu karakteri kodlamak gerektiğini göstermektedir vardır eski davranışın doğru olanı olması gerektiği anlamına gelir.
A String instance that contains the unescaped canonical representation of the Uri instance. All characters are unescaped except #, ?, and %.
VS2012'yi yükledikten sonra, bu unicode karakteri kaçıyor.
VS2012 ile makinede System.dll dosya sürüm yapı sunucuda System.dll dosya sürümü biz neden yararları göz ardı edilmesi 4.0.30319.236
olduğunu 4.0.30319.17929
olduğunu uri.ToString()
kullanarak, neyi test ediyoruz ve etrafta potansiyel bir çalışma var. Herkes bu davranışın neden değişmiş olduğunu açıklayabilir mi, yoksa bu bir hata mıdır? Ben Başarılı sonra .NET 3.5 bunu geçerseniz ben, .NET 4.0 veya .NET 4.5 testin başarısız hedeflerseniz
Düzen, burada, C# sürümü
using System;
using NUnit.Framework;
namespace SystemUriCSharp
{
[TestFixture]
public class UriTest
{
[Test]
public void UriToStringDoesNotEscapeUnicodeCharacters()
{
var uri = new Uri(@"http://www.example.org/test?helloworld=foo%B6bar");
Assert.AreEqual(@"http://www.example.org/test?helloworld=foo¶bar", uri.ToString());
}
}
}
fazla araştırma Biraz olduğunu.
Ben mantık yanlış bir şey yapıyorum ve orada .NET bir hata olmayacak, ama sadece işe olamayacağını dikte farkındayım
Ağ Takımı Bunun neden olduğu ortaya çıktı. –
Muhtemelen 'bool check = @ "http://www.example.org/test?helloworld=foo¶bar" == uri.ToString(); 'false, değil mi? – t3hn00b
Evet, yanlış olan –