Jak znaleźć przyczynę niepowodzenia kompilacji bez żadnego błędu lub ostrzeżenia


145

Mam aplikację WebApplication, która zawiera odwołanie do usług WCF.

Podczas kompilowania przy użyciu programu Visual Studio 2010 kompilacja kończy się niepowodzeniem bez żadnego błędu ani ostrzeżenia. Jednak budowanie .csprojużytkowania MsBuildkończy się sukcesem.

Nie mogę dowiedzieć się, co mam spróbować w programie Visual Studio, aby rozwiązać / zdiagnozować problem. Czy możesz mi pomóc?

EDYTOWAĆ:

Dowiaduję się, że kompilacja zawodziła,

  1. Z tekstu wyświetlanego na pasku stanu.
    wprowadź opis obrazu tutaj

  2. Z okna wyjściowego:

    ========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========

5
skąd wiesz, że twoja kompilacja nie działa?
Sam jestem, mówi Przywróć Monikę

5
Czy jest coś na karcie wyników?
Malice

15
Spróbuj zwiększyć szczegółowość okna danych wyjściowych w programie Visual Studio. Może pomóc w określeniu problemu. Jak zwiększyć poziom szczegółowości: blogs.msdn.com/b/saraford/archive/2008/10/07/…
Maxim Kornilov

6
Czy próbowałeś zrestartować VS2010 lub nawet zrestartować komputer?
comecme

2
@NahuelI. Podobny problem mam po raz kolejny w innym projekcie, kiedy przeszukałem stackoverflow, dostałem własne pytanie :-)
Abhijeet

Odpowiedzi:


120

Właśnie znalazłem się w podobnej sytuacji. W moim przypadku niestandardowa akcja (z pakietu MSBuildVersioning dostępnego na Nuget.org - http://www.nuget.org/packages/MSBuildVersioning/ ), która pojawiła się w elemencie docelowym BeforeBuild pliku csproj, kończyła się niepowodzeniem bez wyzwalania żadnego komunikatu o błędzie w normalne miejsce.

Udało mi się to ustalić, ustawiając „Szczegółowość danych wyjściowych kompilacji projektu MSBuild” (w najnowszej karcie Narzędzia programu Visual Studio [ścieżka: Narzędzia> Opcje> Kompiluj i uruchom ]) na „ Diagnostyka ”, jak pokazano poniżej. To następnie pokazało, że akcja niestandardowa (w moim przypadku HgVersionFile) zawiodła.

Zrzut ekranu z programu Visual Studio przedstawiający zmodyfikowane ustawienie.


2
Doskonałe znajdź Richarda - Naprawdę przydatne informacje, gdy ustawisz oba poziomy szczegółowości na diagnostyczne
Dai Bok

3
Dla każdego, kto nie ma pojęcia jak ja: aby użyć tej metody, może być konieczne przeszukanie zawartości okna wyjściowego. Moje błędy kompilacji były ukrywane za pomocą #pragma warning disableinstrukcji i były widoczne tylko wtedy, gdy szukałem „błędu” w oknie wyjściowym.
sirdank

Po ustawieniu mojej szczegółowości na diagnostykę odkryłem, że otrzymuję wyjątek System.OutOfMemoryException. Używałem 98% dostępnej pamięci mojego komputera. To świetna odpowiedź!
TxRegex

1
To rozwiązuje również problem z VisualStudio 2017. Wielkie dzięki.
H. Aydin

1
W moim przypadku korzystałem z kolejki Nowa kompilacja do budowania na TFS, a okno dialogowe Queue Build ma szczegółowość na drugiej karcie, którą mogłem wyświetlić, a następnie zobaczyć problem w dzienniku kompilacji.
AaronLS

135

Build + Intellisense pochłonął komunikaty o błędach. Wybranie opcji Tylko kompilacja wyświetliło je.

Zrzut ekranu


Właśnie znalazłem się w sytuacji, w której żaden z tych komunikatów nie wyświetla błędu :(
Imad

1
Wow, to zadziałało dla mnie, jak u diabła to jest w nowej wersji VS 2019. Dzięki!
Carter

1
@AbuAbdullah Pracował dla mnie. Dobra robota w pomaganiu innym.
nam

dzięki, uratowałem mój dzień
Bikram Limbu

59
  • Jeśli rozwiązanie zawiera więcej niż jeden projekt, spróbuj zbudować je pojedynczo.
  • Spróbuj ponownie uruchomić program Visual Studio.
  • Spróbuj ponownie uruchomić komputer.
  • Spróbuj „ Odbuduj wszystko
  • Wypróbuj „ Czyste rozwiązanie ”, a następnie usuń pliki „ vspscc ” i „ vssscc ”, a następnie uruchom ponownie program Visual Studio, a następnie „ Odbuduj wszystko ”.

105
A jeśli to nie pomaga, czy powinienem po prostu znaleźć nową pracę?
Alex Zhukovskiy

2
Pomogło mi samo ponowne uruchomienie VS2013. Pracowałem na maszynie wirtualnej z ograniczonymi zasobami, ale nie jestem pewien, czy to miało z tym coś wspólnego.
Jmaurier

2
Nie możesz wyczyścić rozwiązania, jeśli masz ten problem.
H. Aydin

1
Pomogło mi zamknięcie wszystkich wystąpień VS (nie na tyle, aby zamknąć wadliwy), a następnie usunięcie .vsfolderu i ponowne uruchomienie VS.
EliSherer

22

Restart VS (2013 Pro, Win 8.1) zrobił to za mnie.


Społeczność VS 2015 Wygraj 7 z jednym projektem MVC. Ta sama rozdzielczość.
maplemale

2
VS 2017 Community Win 10. Myślę, że powinienem spróbować go wyłączyć i ponownie włączyć, zanim zacznę szukać rozwiązania!
DreamTeK


9

Chcę rozwinąć odpowiedź Sasse .

Aby rozwiązać problem z Visual Studio 2015 Update 2, musiałem budować każdy projekt pojedynczo i patrzeć na okno wyjściowe po każdej kompilacji.

Jeden projekt dał mi

„Nazwa typu lub przestrzeni nazw„ SomeNamespace ”nie istnieje w przestrzeni nazw„ BeforeSomeNamespace ”(czy brakuje odwołania do zestawu?)”.

W oknie Lista błędów nie wystąpił błąd, ale zespół miał żółty znak ostrzegawczy w obszarze „Odnośniki”.

Potem zobaczyłem, że projekt odniesienia dotyczył 4.5.1, a projekt, do którego się odwołujesz 4.6.1. Zmiana wersji 4.6.1 na 4.5.1 umożliwiła pomyślne zakończenie kompilacji.


1
Cóż, budowanie projektu na raz może nie być konieczne, ale jedno jest pewne: uważnie spójrz na okno wyjściowe (jeszcze lepiej skopiuj / wklej je do notatnika i użyj Ctrl + F znajdź), aby znaleźć słowo „brakuje”. Nie pojawia się na liście błędów, ale na pewno zepsuje twoje rozwiązanie. -.-
Dovydas Navickas

5

Nic nie działało, więc usunąłem plik .suo, zrestartowałem VS, wyczyściłem rzutowany, a kompilacja zadziałała.


5

Wydaje się, że istnieje wiele odpowiedzi na to pytanie, więc dodam moje z własnego doświadczenia, mając nadzieję, że zaoszczędzi to komuś czasu / stresu.

Upewnij się, że wszystkie projekty w rozwiązaniu są przeznaczone dla tej samej wersji .NET.

Podobnie jak w przypadku OP, wystąpiło 0 błędów, ale kompilacja wciąż kończyła się niepowodzeniem. Jednak był jeden wpis ostrzegawczy (ukryty między kilkuset bezużytecznymi ostrzeżeniami XML ...) mówiący, że jeden projekt był przeznaczony dla innej wersji .NET niż projekt, do którego się odwoływał. Cały problem polegał na tym, że jeden projekt w moim rozwiązaniu był przeznaczony dla .NET 4.5.2, podczas gdy reszta była ukierunkowana na 4.5.1. To powinno działać, nawet z tej rozbieżności (stąd dlaczego to było tylko ostrzeżenie), ale niestety, to złamał kompilacji.

Dziwną częścią było to, że przez jakiś czas działał dobrze, ale nagle kompilacja zaczęła raz zawieść, powodując ten problem. Nie jestem pewien, co zrobiłem, aby zacząć narzekać na różne wersje docelowe .NET, ale czuję, że w programie Visual Studio są tylko pewne tajemnice, które nigdy nie zostaną rozwiązane.


1
Okazało się, że dodałem nowy projekt i miał on inną wersję docelowego frameworka .Net - naprawiłem to i chociaż kompilacja nadal się nie powiodła, mogłem wtedy zobaczyć błąd, który powodował uszkodzenie kompilacji. Dzięki.
Fijjit


3

Najpierw „Wyczyść rozwiązanie”, a następnie Odbuduj rozwiązanie.

Jeśli nie zadziała, zamknij rozwiązanie i uruchom je ponownie.

Spróbuj tych rzeczy, mam nadzieję, że na pewno zadziała.


3

Inną możliwością jest to, że program Visual Studio musi działać jako administrator, może to być związane z wdrażaniem na lokalnym serwerze IIS lub z inną potrzebą wdrożenia.


3

może się to zdarzyć, gdy jeden z przywoływanych projektów jest nowszą wersją platformy .NET Framework niż bieżący projekt.


3

Miałem ten sam problem i wyśledziłem go do opcji listy błędów „Build + Intellisense”.

Jeśli ta opcja jest zaznaczona, na liście nie są wyświetlane żadne błędy. Przełącz się na „ Tylko kompilacja ”, a błędy pojawią się zgodnie z oczekiwaniami.

Wygląda jak błąd w programie Visual Studio. Ponowne uruchomienie Visual Studio rozwiązało ten problem .


2

Miałem podobny problem po dodaniu nowego projektu (o nazwie „TestCleaner”) do mojego rozwiązania: kompilacja nie powiodła się, brak błędów.

Zwiększyłem szczegółowość wyjścia (zobacz instrukcje Richarda J Fostera) i przeszukałem wynik pod kątem „niepowodzenia”. Szybko odkryłem, który projekt się nie powiódł i dlaczego: projekt „TestRunner” zakończył się niepowodzeniem i wystąpiłbłąd CS0246: nie można znaleźć typu lub nazwy przestrzeni nazw„ TestCleaner ”” (mimo że w kodzie nie zaznaczono żadnych problemów).

Po sprawdzeniu referencji TestRunner, na pewno odwołanie do TestCleaner zostało oznaczone jako nierozwiązane i brakowało ścieżki we właściwościach referencyjnych. Usunięcie i ponowne dodanie tego nie rozwiązało. Ponownie, bez wyjaśnienia, dlaczego.

nierozwiązane odniesienie

W końcu odkryłem przyczynę: „TestCleaner” używał innego docelowego frameworka niż inne projekty. To był .Net 4.5.2; pozostałe 4,5.


2

Tylko ze względu na ukończenie i może pomóc komuś napotkać ten sam błąd w przyszłości, używałem interfejsu Metro Mahapps i zmieniłem XAML jednego okna, ale zapomniałem zmienić częściowej klasy w kodzie. W takim przypadku kompilacja nie powiodła się bez błędu lub ostrzeżenia i mogłem się tego dowiedzieć, zwiększając szczegółowość danych wyjściowych z ustawień:

Okienko błędów

okienko wyjściowe


5
w filtrze błędów wybierz także „tylko buduj”, a nie „buduj + inteligencja”.
niico

2

Miałem ten sam problem. Okno listy błędów zawiera 2 menu rozwijane „Pokaż elementy zawarte w” i „Pokaż wygenerowane problemy”. Nazwy te są widoczne po najechaniu kursorem na listę rozwijaną. Lista rozwijana „Pokaż wygenerowane problemy” została ustawiona na „Kompiluj + IntelliSense” i po zmianie na „Tylko kompilacja” błędy pojawiały się na liście.


2

Dla mnie Target Frameworkbył to problem.

Mój projekt Target Frameworkbył, 4.5.2a projekt przywoływany Target Frameworkbył 4.6.1.

Po zaktualizowaniu projektu Target Frameworkdo 4.6.1, problem został rozwiązany.


1

Miałem ten sam problem! Po prostu usuń folder bin i uruchom ponownie VS. To wszystko. przetestowany w VS 2013.


Kiedy próbowałem rozwiązać ten problem, usuwając folder bin i obj, naprawiłem to. Wymagałem również uprawnień administratora, aby usunąć folder obj, więc stało się coś bardzo dziwnego.
DAG

1

Rozwiązaniem dla mnie było usunięcie .vsfolderu z katalogu głównego rozwiązania i ponowne uruchomienie programu Visual Studio.

Może być również ważne, aby powiedzieć, że chociaż błędy nie były wyświetlane w okienku Lista błędów, nadal były obecne w danych wyjściowych z kompilacji.


1

Spróbuj zbudować swój projekt z wiersza poleceń programu PowerShell:

dotnet build

Następnie możesz zobaczyć wszelkie błędy w danych wyjściowych wiersza polecenia, nawet jeśli program Visual Studio odtwarza w chowanego z komunikatami o błędach kompilacji.


0

Zdarzyło mi się to po dodaniu nowej strony do projektu asp.net.

Wyklułem stronę i sprawiłem, że zostanie pomyślnie zbudowana.

Następnie dodałem ponownie stronę z wykomentowanym całym kodem. Sukces.

Potem stopniowo odkomentowałem kod i wszystko działało.


0

Miałem ten sam problem po usunięciu kilku formularzy. Błędy pojawiły się, gdy wszedłem do kodu i wykonałem „Pokaż definicję” dla jednego z usuniętych elementów sterujących.

Miałem również na celu wyższy framework w jednym z moich projektów, więc mógł to być również problem.


0

Wypróbowałem wszystko, ale nic nie działało w moim przypadku, a następnie zmieniłem wspomniane ustawienia, które rozwiązały problem całkiem dobrze. Spróbuj, jeśli to możliwe, jakiejkolwiek pomocy późniejszym widzom. Te ustawienia mogą się różnić w zależności od sytuacji, ale upewnij się, że skompiluj wszystkie dołączone biblioteki DLL z tymi samymi ustawieniami konfiguracji, które zachowałeś na początku (wspomniane na obrazku).Ustawienia konfiguracji

Zdjęcie tutaj.

Twoje zdrowie!


0

Jeśli pakiet NuGet „Microsoft.Net.Compilers” jest zainstalowany, upewnij się, że pasuje do wersji programu Visual Studio (wersja narzędzi kompilacji).

Wersje 1.x oznaczają C # 6.0 (Visual Studio 2015 i aktualizacje). Na przykład 1.3.2

Więc nie aktualizuj do wersji powyżej 1.x, jeśli używasz VS2015

https://stackoverflow.com/a/44397905/3862615


0

Miałem naprawdę stary projekt na starszej maszynie. Projekt budował się poprawnie, kiedy wyłączyłem maszynę. Dzisiaj otrzymuję błąd kompilacji, ale nie ma komunikatu o błędzie. Po wypróbowaniu kilku sugestii z góry, bez powodzenia.

W programie Visual Studio 2015 włączyłem szczegółowy program MSBuild w obszarze narzędzia > opcje> projekty i rozwiązania> kompiluj i uruchamiaj

Dało mi kilka szczegółów na temat kompilacji, ale bez błędów. Następnie próbowałem sprawdzić rozszerzenia i aktualizacje (Narzędzia> Rozszerzenia i aktualizacje) i stwierdziłem, że kilka z nich wymaga aktualizacji.

Winowajcą był pakiet Nuget , po aktualizacji Nugeta - kompilacja się powiodła.

wprowadź opis obrazu tutaj



0

Ponieważ wszystko nie działało, okazało się, że błędy nie są wyświetlane podczas otwierania projektu jako rozwiązania (.sln), podczas gdy błąd pojawia się podczas otwierania projektu jako projektu.


0

Miałem ten sam problem, zmieniłem Narzędzia -> Opcje -> Projekty i rozwiązania / Buduj i uruchamiaj -> Szczegółowość pliku dziennika kompilacji projektu MSBuild [ Diagnostyka ]. Ta opcja pokazuje błąd w dzienniku, z pewnych powodów mój VS nie pokazuje błędu w zakładce Błędy!

wprowadź opis obrazu tutaj

Wykonaj powyższe ustawienia i kopię wyjściową w notatniku / edytorze tekstowym i wyszukaj błąd. Pokaże wszystkie błędy.


0

Ponowne uruchomienie Visual Studio działało dla mnie. Spróbuj również normalnie ponownie uruchomić program Visual Studio (nie uruchamiaj jako administrator). Spróbuj ponownie uruchomić system i powtórz powyższy krok.


0

Inny sposób odtworzenia tego objawu:

Dodałem nowy projekt do istniejącego rozwiązania, a wynik kompilacji zgłosił błędy, takie jak „nie można znaleźć typu lub nazwy przestrzeni nazw X ...”, ale na liście błędów nie przedstawiono żadnych błędów.

Klasy, o których wspomniałem, znajdowały się w innych projektach (do których się odwoływałem) w tym samym rozwiązaniu.

Okazało się, że przez pomyłkę w nowym projekcie wybrałem wcześniejszą wersję .net. Kiedy przeszedłem na tę samą wersję, co inne projekty, wszystko zbudowałem bez żadnych błędów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.