Edycja: Właśnie wypróbowałem to z VS 2010, a problem nie wystąpił. Problem dotyczy tylko VS 2012. Czy to naprawdę może być błąd? Dzieje się tak również na dwóch oddzielnych laptopach, a nawet na laptopie przyjaciela (który właśnie dostał najnowszy kod).Debugger pomijając najnowszy kod zameldowania w VS 2012 - współpracuje z VS 2010
Najpierw zrzut ekranu z problemem. Ta metoda jest wszystkim nowym kodem.
debugger jest pomijanie kodu z mojej ostatniej odprawie. Komentarze w poniższym kodzie wyjaśniają, co się dzieje, gdy debuguję tę metodę. Tak naprawdę nie ma potrzeby, aby spróbować zrozumieć kod; zauważ, że linie kodu są pomijane. Jeśli uważasz, że kod nie pasuje do debugowanego zestawu, proszę, weź ze mną. Zobaczysz, gdzie debugger rozpoznaje nowy kod, ale nie ma istniejącego kodu. Takie zachowanie występuje na dwóch różnych laptopach, po usunięciu kodu z dysku i ponownym uzyskaniu najnowszego. Każdy komentarz informuje, czy debugger trafia w linię.
[TestMethod()]
[DeploymentItem("PrestoCommon.dll")]
public void ApplicationShouldBeInstalledTest_UseCase9()
{
// Debugger hits this line
ApplicationServer appServerAccessor = new ApplicationServer();
// Debugger does not hit these next two lines
PrivateObject privateObject = new PrivateObject(appServerAccessor);
ApplicationServer appServer = ApplicationServerLogic.GetByName("server10");
// Debugger hits this line. Weirdness: both objects are null, and after this line runs,
// appServerAccessor is no longer null.
appServerAccessor.Id = appServer.Id;
// Skips this line
ApplicationWithOverrideVariableGroup appWithValidGroup = appServer.ApplicationsWithOverrideGroup[0];
// Debugger hits this line, but F11 doesn't take me into the method.
appWithValidGroup.CustomVariableGroup = CustomVariableGroupLogic.GetById("CustomVariableGroups/4");
// Skips this line
Assert.AreEqual(true, true);
}
Demontaż pokazuje tylko linie kodu, które faktycznie zostały trafione.
Teraz to sprawdzić. Jeśli dodaję nową linię kodu, debugger rozpoznaje ją, a pozostałe linie kodu zmieniają się, o ile są rozpoznawane przez debugger. Tylko druga linia kodu w ramach metody jest nowa.
[TestMethod()]
[DeploymentItem("PrestoCommon.dll")]
public void ApplicationShouldBeInstalledTest_UseCase9()
{
// Debugger hits this line
ApplicationServer appServerAccessor = new ApplicationServer();
// New line. It's recognized by the debugger, and it shows up in the disassembly.
if (DateTime.Now > DateTime.Now.AddHours(1)) { return; }
// Debugger does not hit these next two lines
PrivateObject privateObject = new PrivateObject(appServerAccessor);
ApplicationServer appServer = ApplicationServerLogic.GetByName("server10"); // Gets hit now.
// Debugger hits this line. Weirdness: both objects are null, and after this line runs,
// appServerAccessor is no longer null.
appServerAccessor.Id = appServer.Id; // No longer gets hit.
// Skips this line (now it's getting hit)
ApplicationWithOverrideVariableGroup appWithValidGroup = appServer.ApplicationsWithOverrideGroup[0];
// Debugger hits this line, but F11 doesn't take me into the method. Now this gets skipped.
appWithValidGroup.CustomVariableGroup = CustomVariableGroupLogic.GetById("CustomVariableGroups/4");
// Skips this line. Still skipped.
Assert.AreEqual(true, true);
}
I tu częściowy zrzut demontażu, pokazując nową linię kodu:
Jak to się dzieje?
Dodanie do tajemniczości, w pewnym momencie to nawet wrócił:
if (DateTime.Now > DateTime.Now.AddDays(1)) { return; }
Rzeczy próbowałem:
- Usuwanie kodu źródłowego z dysku twardego i wymusić uzyskać najnowszy
- Naprawa VS 2012
- Czy jakieś VS clean-up
- Używaj VS 2010, kod zmiany, zameldowania otrzymywać z VS 2012
- Reboot
- inne (nie pamiętam al z nich)
czy możesz pokazać klasę 'ForceInstallation'? – MethodMan
Odbuduj swój kod. Poszukaj także procesu testu biegowego w Menedżerze zadań i zatrzymaj go. Może mieć starą wersję twojego kodu. –
Zamknąłem rozwiązanie, ponownie go otworzyłem i przebudowałem. Ten sam problem. Wydaje się, że działa kilka procesów MsBuild. Mam zamiar zrestartować i spróbować ponownie. Opublikuję klasę "ForceInstallation', chociaż nie sądzę, że to jest to. –