Jeśli utworzę nowy projekt w Visual Studio 2010 SP1 i wybiorę „Aplikacja WPF” i spróbuję zbudować wygenerowaną aplikację, pojawia się błąd
Nazwa „InitializeComponent” nie istnieje w bieżącym kontekście.
Mam podobny błąd dziś rano, kiedy próbowałem zbudować mój obecny projekt. Wczoraj nie miałem problemu ze skompilowaniem i uruchomieniem go.
Utworzyłem nowy projekt i pojawiał się błąd przy każdej kompilacji projektu. Właśnie wysłałem projekt do kolegi, a on właśnie skompilował bez żadnych błędów.
Co jest nie tak?
wpf
visual-studio-2010
visual-studio
initializecomponent
użytkownik876402
źródło
źródło
Odpowiedzi:
Spotkałem się z tym kilka razy i ciągle zapominam, co to powoduje. Wpadłem na to, kiedy zmieniłem nazwę przestrzeni nazw w moim kodzie za plikiem, ale nie w mojej XAML.
Sprawdź, czy zrobiłeś to samo.
Przestrzenie nazw i nazwy klas muszą być zgodne, ponieważ oba są częścią częściowej klasy
źródło
Akcja kompilacji dla pliku .xaml musi być również ustawiona na „Strona”, podczas przenoszenia pliku xaml między projektami to ustawienie zostanie utracone (przynajmniej w VS 2010).
źródło
Dla tych, którzy nie mają błędy w trybie debugowania, ale zrobić mieć określony błąd w trybie wydania (i jeszcze projekt działa poprawnie), tutaj jest coś prostego spróbować:
Ta metoda działała dla mnie w VS 2015 i według innych użytkowników również w 2017 i 2019
źródło
Wystąpił ten błąd podczas refaktoryzacji, gdy zmieniłem nazwy niektórych plików / folderów i konieczne było ponowne wygenerowanie wcześniejszych plików * .g.cs.
źródło
x:Class
pasuje doNamespace.Class
.Jest to bardzo konkretny powód i jest to określone w ustawieniach projektu. Zazwyczaj dzieje się tak, gdy próbujesz dodać kontrolkę / okno WPF do biblioteki lub projektu klasy .NET 2.0. Przyczyną tego błędu jest to, że projekt nie wie, że buduje kontrolkę lub okno WPF i dlatego próbuje zbudować go jako projekt C # 2.0.
Rozwiązanie polega na edycji pliku .csproj. Kliknij prawym przyciskiem myszy projekt powodujący problem i wybierz „Rozładuj projekt”. Kliknij rozładowany projekt prawym przyciskiem myszy i wybierz „Edytuj .csproj”. Plik .csproj zostanie otwarty i zobaczysz XML. poszukaj następującego wiersza:
Jest blisko końca pliku, a prawdopodobnie masz tylko jedną linię
To mówi Visual Studio, aby zbudowało projekt jako projekt .NET 2.0. Chcemy powiedzieć Visual Studio, że tak naprawdę jest to projekt WPF, dlatego musimy dodać następujący wiersz:
Ta linia powie Visual Studio, aby zbudowała projekt jako projekt WPF. Teraz dno pliku .csproj powinno wyglądać następująco:
Zapisz plik .csproj, kliknij go prawym przyciskiem myszy w Eksploratorze rozwiązań i wybierz kompilację „Przeładuj projekt” i gotowe!
źródło
tak się stało ze mną, gdy przypadkowo usunąłem odwołanie do klasy z definicji xaml:
Wymieniłem
pierwsza linia z tym:
Wiem, że to nie jest odpowiedź na pierwotne pytanie (ponieważ ten projekt opiera się na innej maszynie), ale komunikat o błędzie był taki sam, więc może pomogę komuś w tej sytuacji.
źródło
Ten błąd może pojawić się podczas importowania klasy z innego projektu lub zmiany ścieżki pliku xaml lub przestrzeni nazw albo pliku xaml, albo pliku .cs.
Po pierwsze: może mieć przestrzeń nazw różną od tego, co masz w nowym projekcie
Jak widać przestrzeń nazw w importowanym pliku zaczyna się od starej nazwy projektu: „TrainerB” , ale nowy projekt może mieć inną nazwę, więc po prostu zmień go na poprawną nową nazwę projektu, zarówno w pliku .xaml, jak i plik .cs za.
Dwa:
zmień właściwości pliku .xaml na:
Kompilacja działania: Osadzony zasób
Narzędzie niestandardowe: MSBuild: UpdateDesignTimeXaml
źródło
xaml
pliku. +1Upewnij się w pliku xaml
dopasuj nazwę „Projekt1” i nazwę „Strona1”
źródło
Sprawdź plik projektanta .
Miałem ten sam problem. W moim przypadku, przyczyną było to, że
namespace
za FileName.Designer.cs nie pasuje do (poprawne)namespace
stosowany w FileName.cs .Zmiana
namespace
z FileName.Designer.cs na zgodny z FileName.cs natychmiast rozwiązać ten problem.źródło
Miałem to (chociaż była to w dużej mierze moja wina i zostało spowodowane po skopiowaniu i wklejeniu kodu); może się zdarzyć, gdy przestrzeń nazw nie pasuje między XAML a kodem z tyłu
NA PRZYKŁAD
a kod z tyłu to
źródło
Napotkałem to podczas zmiany nazwy kontrolki użytkownika. Sposób, w jaki to naprawiłem, to skomentowanie InitializeComponent, sprawdzenie, czy wszystkie nazwy są poprawne (xaml i kod z tyłu), zbudowanie projektu, odkomentowanie InitializeComponent, a następnie kompilacja ponownie. Wygląda na to, że może istnieć kilka przyczyn / rozwiązań tego problemu, ale w ten sposób zrobiłem to dla mnie.
źródło
Żadna z powyższych odpowiedzi nie działała dla mnie. Próbowałem ich wszystkich oprócz duplikatów. Jednak z jakiegoś dziwnego powodu działało to w moim projekcie międzyplatformowym w Visual Studio 2015:
źródło
Zgadzam się z powyższą odpowiedzią, że przestrzenie nazw muszą się zgadzać. Miałem jednak taki problem, gdy pasowały do siebie przestrzenie nazw.
Aby to naprawić, po prostu zmieniłem przestrzeń nazw w XAML na NIEPRAWIDŁOWĄ, zapisałem, a następnie zmieniłem z powrotem na PRAWIDŁOWĄ. Voila!
źródło
Jeśli używasz Xamarin Forms i przenosisz plik XAML, „akcja kompilacji” pliku jest zmieniana. Xamarin Forms wymaga „build action = Embedded Resource”.
Zastosuj „akcję kompilacji” w Visual Studio:
Select the XAML file -> Properties -> Build Action = Embedded Resource
źródło
Wypróbowuję wszystkie powyższe sugestie. Jeśli spróbujesz również bez powodzenia, zdobądź łatwiejszy sposób. Utwórz nowy page.xaml, a następnie skopiuj kod nowej klasy i usuń klasę XAML z problemami. Nie marnuj więcej czasu.
źródło
Rozładuj całe rozwiązanie, a następnie załaduj je ponownie. Następnie przebuduj rozwiązanie. To rozwiązało problem.
źródło
Inną częstą przyczyną tego błędu jest zrobienie czegoś w tym:
Kliknij prawym przyciskiem myszy folder w projekcie, aby utworzyć nowy UserControl. Spowoduje to utworzenie pliku klasy i pliku xaml, który wywodzi się z kontroli użytkownika w przestrzeni nazw folderu.
Następnie decydujesz się zmienić przestrzeń nazw klasy, ponieważ tak naprawdę używasz folderów do organizacji kodu. Atrybut x: Class nie zostanie automatycznie zaktualizowany, więc będzie szukał klasy, która nie istnieje. Prawdopodobnie mógłby użyć lepszego komunikatu o błędzie, na przykład „Nie można znaleźć typu klasy w nameace bla.blaa.blaaa”.
źródło
Innym rozwiązaniem tego problemu jest po prostu zmiana właściwości-> Kompilacja działania na XAML z Embedded Resource na cokolwiek innego, zapisanie, a następnie zmiana z powrotem na Embedded Resource. Błąd znika.
źródło
Wiem, że udzielono odpowiedzi z innej przyczyny, ale jest to bardzo trafiony post i natknąłem się na ten sam problem z biblioteką klas. W tym przypadku okazało się, że zarówno zmiana nazw (w moim odpowiedział w tym poście tutaj ) i że kompilator nie mógł odbudować Window.gics który definiuje metodę InitializeComponent (). Nie mogło, ponieważ w bibliotece klas brakowało wartości ProjectTypeGuid dla projektów WPF w pliku csproj. Instrukcje na ten temat są tutaj i tutaj . Myślałem, że podzielę się, na wypadek, gdyby ktoś napotkał ten sam problem. W tym przypadku wystarczy zmiana przestrzeni nazw.
źródło
Stało się tak, ponieważ deinstalator pakietu Nuget zdmuchnął wszystkie atrybuty elementu <Application> w App.xaml. Obejmowało to atrybut x: Class, który określa nazwę klasy aplikacji. Tak więc klasa częściowa zawierająca metodę InitializeComponent () nigdy nie została wygenerowana.
Rozwiązałem problem, przywracając App.xaml do kopii kontrolowanej przez źródło.
źródło
To rozwiązało dla mnie.
Skomentowałem zasoby w pliku App.xaml
Skomentowanie tego z powrotem w celu naprawienia błędu kompilacji.
Kopiąc nieco głębiej odkryłem, że plik app.g.cs w {Project} \ obj \ debug zawierał tylko następujące elementy, kiedy zostawiłem komentarz w zasobach.
źródło
Dla tych, którzy znajdą to w Internecie. Sprawdź plik Windows.csproj, jeśli jest tam kompilacja. Powinny być 2 wpisy
źródło
<DependentUpon>YourFile.xaml</DependentUpon>
jakiegoś powodu brakowało mi tego i właśnie to mnie naprawiło!Jeśli przestrzenie nazw są poprawne, oznacza to również ten sam błąd,
Po prostu zamknij aplikację i otwórz ją ponownie .
To może rozwiązać twój problem
źródło
Po pewnym działaniu przestrzeń nazw pliku .cs i ta w pliku .xaml mogą być inne (w xaml poszukaj x: Class = "namespace.yourType").
Napraw je, aby były takie same.
źródło
Odkryłem, że „obiekt startowy” był (nieustawiony), powodując ten błąd.
„Obiekt startowy” (nieustawiony)
źródło
root
doView
katalogu.Ponieważ wydaje się, że jest to główny wątek dotyczący problemu dotyczącego braku „InitializeComponent”, tutaj dołączę moją odpowiedź.
Ja również miałem ten problem i próbowałem wszystkiego, co znalazłem tutaj i na wszystkich innych forach, które Google może znaleźć, jednak żaden nie rozwiązał problemu dla mnie. Po dwóch godzinach próbowania wszystkiego w końcu zorientowałem się, co było nie tak z moją konfiguracją.
W naszym projekcie korzystamy z komponentów Metro od MahApps . Widok, który przysparzał mi kłopotów, był dziedziczeniem po MetroWindow, takim jak ten:
Teraz zdefiniowałem moje zasoby statyczne jako
Tak zdefiniowałem Zasoby we
UserControl
wszystkich moich innych widokach, więc zakładam, że zadziała.Tak jednak nie było
Controls:MetroWindow
! Tam absolutnie potrzebowałem definicji zasobu w następujący sposób:Podsumowując, moim problemem był brakujący
<ResourceDictionary>
tag. Naprawdę nie wiem, dlaczego to spowodowało błąd „InitializeComponent” i dziwnie nawet nie spowodowało tego na każdej mojej maszynie, ale tak to naprawiłem. Mam nadzieję, że to pomoże (pozostałe 0,001% osób napotykających ten problem).źródło
Właśnie napotkałem ten problem i okazało się, że mój projekt jest przechowywany w folderze użytkownika, który jest przechowywany w sieci, i mieliśmy chwilową awarię sieci. Zrobiłem kompilację; narzekał, że moje pliki zostały zmodyfikowane poza edytorem (tak się nie stało; blokady plików właśnie zostały zakorkowane) i działało dobrze, usuwając błąd dotyczący
InitializeComponent()
metody.BTW, jeśli się zastanawiasz, tworzenie czegoś z dysku sieciowego to zła praktyka. Staje się to szczególnie problematyczne, gdy próbujesz wykorzystać kod zarządzany .NET; z mojego doświadczenia, że wariuje za każdym razem, gdy budujesz. Zapomniałem umieścić tego małego projektu do odpowiedniego folderu i ostatecznie zapłaciłem cenę.
źródło
Innym możliwym wyjaśnieniem jest to, że budujesz na x86. Kliknij prawym przyciskiem myszy swoje rozwiązanie i wybierz Menedżer konfiguracji. Sprawdź, czy budujesz na x86 zamiast na dowolnym procesorze.
źródło
Zdaję sobie sprawę, że to starsze pytanie, ale mieliśmy podobny problem. Byliśmy w stanie zbudować projekt przy użyciu VS2012, ale nie przy użyciu msbuild z wiersza poleceń. Poszedłem do pliku .proj i zauważyłem, że nie ma rekordu „ProjectTypeGuids” w domyślnej sekcji „PropertyGroup”, więc dodałem to:
który jest GUID projektu dla WPF. Następnie usunąłem i ponownie dodałem UserControl i zaczął działać. Nie jestem pewien, czy musiałem zrobić ten ostatni krok, ale teraz działa dla mnie.
źródło
Z jakiegoś powodu po skopiowaniu .xaml i .cs między projektami akcja kompilacji czasami się zmienia. Upewnij się, że kompilacja twojego .xaml to Page.
źródło