Я обнаружил, что результаты теста отличаются на моей машине и сервере сборки. Мне удалось найти единственную строку, которая отличается. Это сравнение строк. Две строки отличаются в случае первого символа.
Тест ниже проходит на моем локальном компьютере и выходит из строя на машине сборки.
[TestClass]
public class Tests
{
[TestMethod]
public void Strings()
{
Assert.IsFalse(0 == string.Compare("Term’s", "term’s", false, CultureInfo.InvariantCulture));
}
}
Я также попытался изменить его на string.Equals
:
string.Equals("Term’s", "term’s", StringComparison.InvariantCulture);
string.Equals
возвращает true на сервере сборки и возвращает false на моей локальной машине.
Порядковое сравнение дает одинаковые результаты на обеих машинах:
string.Compare("Term’s", "term’s", StringComparison.Ordinal))
Как я понимаю, InvariantCulture должен возвращать одинаковые результаты везде. Каким образом зависящее от случая культура-инвариантное сравнение строк зависит от машины? Какие параметры следует проверить, чтобы определить проблему?
Обновление: платформа и строка
Строка важна. Эти результаты можно наблюдать для строк с "экзотической" пунктуацией, таких как ПРАВИЛЬНАЯ ОДНОЦВЕТНАЯ МАРКА или ПРАВИЛЬНАЯ ДВОЙНАЯ ЦЕЛЕВОЙ МАРКИ
Кажется, что поведение воспроизводится на машинах Windows 8. Вы можете увидеть это даже на https://dotnetfiddle.net/, если вы наберете следующее:
using System;
using System.Globalization;
public class Program
{
public static void Main()
{
Console.WriteLine(0 == string.Compare("Terms", "terms", false, CultureInfo.InvariantCulture));
Console.WriteLine(0 == string.Compare("Term’s", "term’s", false, CultureInfo.InvariantCulture));
Console.WriteLine(0 == string.Compare("Term"s", "term"s", false, CultureInfo.InvariantCulture));
Console.WriteLine(0 == string.Compare("Term"s", "term"s", false, CultureInfo.InvariantCulture));
//outputs
//False
//True
//True
//True
}
}
Environment.OSVersion
(сервер): Microsoft Windows NT 6.2.9200.0 Environment.Is64BitOperatingSystem
(сервер): True Environment.Version
(сервер) 4.0.30319.18449
Environment.OSVersion
(локальный): Microsoft Windows NT 6.1.7601 Пакет обновления 1 Environment.Is64BitOperatingSystem
(локальный): True
Environment.Version
(локальный): 4.0.30319.18444
Обновление: связанная с форумом форума MSDN
Это может быть известная ошибка в Windows 8, которая исправлена в Windows 8.1.