答えは時代遅れです。バグが修正された場合、いつ、どのバージョンのどのアセンブリで?
正解です。VS2013では、Microsoft.VisualStudio.QualityTools.UnitTestFramework.dllアセンブリバージョン10.0.0.0で修正されました。従来のGACであるc:\ windows \ assemblyに存在し、10.1.0.0バージョンもあります。
ここにDLL地獄の話があります。10.1.0.0バージョンはVS2010で使用されたものでした。Double.NaNを適切にチェックしないというバグがありました。Microsoftは間違いを犯し、10.1.0.0を修正しましたが、バージョン番号は変更しませんでした。したがって、VS2013のインストール後にVS2010をインストールした人は誰でも怪我をすることになり、DLLをバグのあるバージョンで上書きすることになります。
DLL Hellを解明することは決して簡単ではありませんが、接続の記事と私のマシンでの動作方法から、顧客の苦情から障害モードを特定したように見えます。そして、アップデートで提供される修正を提供しました。2014年7月以降、どちらを使用するかは明確ではありません。v10.0.0.0を使用するようになり、MSTest.exeテストランナーとQTAgentには、<bindingRedirect>
10.1.0.0から10.0.0.0にリダイレクトする.configファイルがあります(タイプミスではありません)。 。必ず最新のアップデート(現在は4)を入手してください。インストールしたアップデートがわからない場合は、[ヘルプ]+[バージョン情報]を参照してください。
記録として、固定コードはDouble.NaNの特定のチェックを取得し、次のようになります。
public static void AreEqual(double expected, double actual, double delta, string message, params object[] parameters)
{
if ((double.IsNaN(expected) || double.IsNaN(actual)) || double.IsNaN(delta))
{
string str = (string) FrameworkMessages.AreEqualDeltaFailMsg((message == null) ? string.Empty : ReplaceNulls(message), expected.ToString(CultureInfo.CurrentCulture.NumberFormat), actual.ToString(CultureInfo.CurrentCulture.NumberFormat), delta.ToString(CultureInfo.CurrentCulture.NumberFormat));
HandleFail("Assert.AreEqual", str, parameters);
}
if (Math.Abs((double) (expected - actual)) > delta)
{
string str2 = (string) FrameworkMessages.AreEqualDeltaFailMsg((message == null) ? string.Empty : ReplaceNulls(message), expected.ToString(CultureInfo.CurrentCulture.NumberFormat), actual.ToString(CultureInfo.CurrentCulture.NumberFormat), delta.ToString(CultureInfo.CurrentCulture.NumberFormat));
HandleFail("Assert.AreEqual", str2, parameters);
}
}