एक देव मशीन पर VS2012 प्रीमियम स्थापित करने के बाद एक यूनिट परीक्षण विफल हुआ, इसलिए डेवलपर ने समस्या को हल किया। जब परिवर्तन टीमसिटी में धकेल दिए गए तो यूनिट परीक्षण विफल हो गया। परियोजना को VS2012 के साथ संगत होने के लिए अपग्रेड किए जाने वाले समाधान फ़ाइल के अलावा अन्य नहीं बदला गया है। यह अभी भी लक्ष्य है। नेट फ्रेमवर्क 4.0System.Uri.ToString व्यवहार VS2012 के बाद
मैंने Uri.ToString
पर कॉल करते समय यूनिकोड वर्णों से बचने के साथ किसी समस्या के लिए समस्या को अलग कर दिया है। निम्नलिखित कोड व्यवहार को दोहराता है।
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
VS2010 में एक मशीन है कि VS2012 इंस्टॉल नहीं है, पर इस रनिंग सफल होता है, स्थापित VS2012 के साथ एक मशीन पर VS2010 में इस चल विफल रहता है। NuGet से NCrunch और NUnit के नवीनतम संस्करण का उपयोग कर दोनों।
में विफल रहा है ज़ोर से संदेश
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"
-----------------------------------------------------^
दोनों .NET 4 और .NET 4.5 के लिए MSDN पर प्रलेखन पता चलता है कि ToString
इस चरित्र सांकेतिक शब्दों में बदलना नहीं करना चाहिए, जिसका अर्थ है कि पुराना व्यवहार सही होना चाहिए।
A String instance that contains the unescaped canonical representation of the Uri instance. All characters are unescaped except #, ?, and %.
वीएस2012 स्थापित करने के बाद, यह यूनिकोड चरित्र बच निकला जा रहा है।
VS2012 के साथ मशीन पर System.dll की फ़ाइल संस्करण 4.0.30319.17929
है निर्माण सर्वर पर System.dll की फ़ाइल संस्करण 4.0.30319.236
कारण है कि हम कर रहे हैं की खूबियों की उपेक्षा है uri.ToString()
का उपयोग करके, हम परीक्षण कर रहे हैं और आसपास के किसी भी संभावित काम के बारे में। क्या कोई यह समझा सकता है कि यह व्यवहार क्यों बदल गया है, या यह एक बग है?
संपादित करें, यहाँ सी # संस्करण
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());
}
}
}
आगे की जांच पड़ताल के बारे में थोड़ी, अगर मैं, .NET 4.0 या .NET 4.5 परीक्षण असफल को लक्षित अगर मैं इसे .NET 3.5 तो यह सफल होता है करने के लिए स्विच है।
मुझे पता है तर्क तय है कि यह है कि मैं कुछ गलत कर रहा हूँ और वहाँ .NET में एक बग नहीं होगा, लेकिन मैं सिर्फ काम नहीं कर सकता हूँ यह क्यों हो रहा है। –
संभावित रूप से 'बूल चेक = @ "http://www.example.org/test?helloworld=foo¶bar" == uri.ToString();' गलत है, है ना? – t3hn00b
हां यह झूठा है –