Nazwa „InitializeComponent” nie istnieje w bieżącym kontekście

383

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?

użytkownik876402
źródło
3
Ten „błąd” użytkownika wygląda na łatwy do rozwiązania, po prostu prostą prawidłową definicję x: Class. Dopóki wszystko nie będzie w porządku, programista powinien zwrócić większą uwagę, ale co, jeśli nie jest to błąd, ale błąd ducha z tym samym komunikatem o błędzie? Przeczytałem Mnóstwo różnych obejść voodoo od 2012 roku. Pomogłoby to VS bardzo wyraźnemu komunikatowi o błędzie i OCZYWIŚCIE poprawki błędów dla duchów z tym samym komunikatem. Od 2012 roku programiści zmieniają konfigurację kompilacji z plików, projektów, kopiują-wklejają projekt, usuwają pliki z folderu aplikacji, restartują VS itp. Bravo MS ... błąd 4 lata i wciąż się starzeje!
juagicre
2
Dla przyszłych czytelników tego pytania: Wydaje się, że ten problem ma wiele możliwych źródeł. W moim przypadku kilka pierwszych odpowiedzi nie pomogło, ale jedna z odpowiedzi poniżej była poprawna.
MOnsDaR
@MOnsDaR Przestrzeń nazw pliku projektanta była dla mnie problemem.
Ctrl S
Chociaż może to być spowodowane wieloma rzeczami (przestrzeń nazw przemianowana na \ Page type - MSBuild), w końcu znalazłem rozwiązanie tego, co spowodowało to w odziedziczonym przeze mnie projekcie. W plikach .csproj musiałem zmienić „ToolsVersion” z 4 na 15 (VS 2017).
MrMikeJJ

Odpowiedzi:

737

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

namespace ZZZ
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow
    {
         //...
    }
}

<!-- XAML -->
<Window x:Class="ZZZ.MainWindow">
Sean B.
źródło
10
Dziękuję Sean. Przyszedłem tutaj, aby opublikować tę odpowiedź tutaj, ale już mnie pobiłaś. Dokładnie tak się stało i rozwiązało mój problem. Twój komentarz powinien znajdować się wyżej na listach przebojów, ponieważ zaoszczędziłoby mi to 15 minut.
Magnum,
2
Jeśli nazwy klas nie są takie same,
pojawi
2
Oto odpowiedź. Nie jestem pewien, dlaczego nie został wybrany, ale to jest to i wpadłem na to, kodując niektóre Xamarin.Forms.
Marcus Shockley
1
Podczas refaktoryzacji pamiętaj o dołączeniu komentarzy i napisów (Visual Studio 2015)
Gabriel GM
3
Dla mnie (w Xamarain.Forms) korzystającego z projektu „Szybki start” pobranego z platformy Azure była to biała spacja / wcięcie między xmlns: x = „ schemas.microsoft.com/winfx/2009/xaml ” i x: klasa, która była problem. Usunąłem to, przepisałem i zadziałało!
James
241

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).

Segfault
źródło
11
Tak się ze mną działo. Dzięki!
Ignacio Soler Garcia
3
Po wklejeniu kopii zdarza się, że akcja kompilacji xaml zmienia się ze strony na treść
Roberto,
4
Nadal dzieje się w Visual Studio 2012 (aktualizacja 2)
gumo
8
Nadal dzieje się w Visual Studio 2013
Chris Ray
7
Poważnie ... dlaczego Microsoft, dlaczego? Nienawidzisz mnie / nas?
qwertoyo
106

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ć:

  1. Otwórz plik XAML odpowiadający obrażającemu plikowi xaml.cs.
  2. Dokonaj edycji - dowolna edycja, taka jak dodanie gdzieś spacji
  3. Zapisz plik i zamknij go

Ta metoda działała dla mnie w VS 2015 i według innych użytkowników również w 2017 i 2019

BCA
źródło
3
Jesteś dziś moim Bohaterem. Dziękuję
Peter Peter
14
Co dziwne, zadziałało to dla mnie z VS2015. I naprawił wszystkie błędy we wszystkich plikach XAML. To naprawdę chwila WTF.
William Denman
5
Dang, znowu mnie to poparzyło. Na szczęście znalazłem tę samą odpowiedź, którą już głosowałem i komentowałem. Naprawdę powinienem, ale to post-it na moim monitorze.
William Denman,
3
To samo w VS2017 i to naprawiło.
Hans
2
Nadal działa w VS2019 ...
soulflyman
29
  1. Przejdź do katalogu rozwiązania
  2. Usuń folder \ obj
  3. Odbuduj rozwiązanie

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.

JordanBean
źródło
Wygląda na to, że mam ten sam problem, ale to nie działało dla mnie.
LuckyLikey
Zrób to po sprawdzeniu, czy xaml x:Classpasuje do Namespace.Class.
Jake
tnx. ta prosta sztuczka zrobiła to dla mnie.
gil adino
26

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:

<Import Project=…..

Jest blisko końca pliku, a prawdopodobnie masz tylko jedną linię

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

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:

<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />

Ta linia powie Visual Studio, aby zbudowała projekt jako projekt WPF. Teraz dno pliku .csproj powinno wyglądać następująco:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />

Zapisz plik .csproj, kliknij go prawym przyciskiem myszy w Eksploratorze rozwiązań i wybierz kompilację „Przeładuj projekt” i gotowe!

Shailender Singh
źródło
1
Próbowałem tego, zanim napisałem to pytanie, ale to nie pomaga. Myślę, że to trochę dziwne, że nie mogę skompilować nowego projektu, ale mój kolega może ...
user876402
1
Próbowałem też i to nie pomogło. Dodanie nowego importu spowodowało pojawienie się nowego ostrzeżenia (patrz poniżej), ale oryginalny błąd nadal występuje. „C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.WinFX.targets” nie może zostać ponownie zaimportowany. Został już zaimportowany z „C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.NETFramework.targets (76,3)”. Najprawdopodobniej jest to błąd tworzenia kompilacji. Ten kolejny import zostanie zignorowany. „
user316117,
Właśnie próbowałem i to nie działało ...?
Sizons,
Dziękuję, naprawiłem to dla odziedziczonego projektu.
MrMikeJJ
22

tak się stało ze mną, gdy przypadkowo usunąłem odwołanie do klasy z definicji xaml:

Wymieniłem

<Window x:Class="myapp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

pierwsza linia z tym:

<RibbonWindow 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

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.

p3d3str1an
źródło
to nie był dokładnie mój problem, ale pomógł mi go zlokalizować. Potem miałem przestrzeń nazw bez nazwy klasy
Rivenfall
To zadziałało dla mnie. dzięki
Sinaesthetic
To pomogło mi znaleźć problem, w moim przypadku brakowało mi wiersza x: Class, dodając to w naprawiłem to dla mnie
apc
18

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

namespace TrainerB.MVC.Forms
{
     public partial class AboutDeveloper : ContentPage
     {
          public AboutDeveloper()
          {
               InitializeComponent();
          }
     }
}

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

Właściwości pliku Xaml

Korekta przestrzeni nazw Xaml 01

Korekta przestrzeni nazw Xaml 02

Reader Man San
źródło
O mój Boże! naprawdę dziękuję za to rozwiązanie. Przetestowałem każde znalezione tam rozwiązanie i nic nie działa. Sztuczka polegała na właściwościach xamlpliku. +1
IgniteCoders
16

Upewnij się w pliku xaml

<Page x:Class="Project1.Page1" ...

dopasuj nazwę „Projekt1” i nazwę „Strona1”

Utwór muzyczny
źródło
To rozwiązało mój problem.
octavian
16

Sprawdź plik projektanta .

Miałem ten sam problem. W moim przypadku, przyczyną było to, że namespaceza FileName.Designer.cs nie pasuje do (poprawne) namespacestosowany w FileName.cs .

Zmiana namespacez FileName.Designer.cs na zgodny z FileName.cs natychmiast rozwiązać ten problem.

Ctrl S.
źródło
14

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

<UserControl x:Class="DockPanel.TreeView" />

a kod z tyłu to

namespace NotDockPanel
Dave
źródło
Doprowadziło mnie to do odkrycia, że ​​mój Projektant miał niepoprawną przestrzeń nazw. Dzięki!
Ctrl S,
13

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.

Morgan Herlocker
źródło
1
Nie zmieniłem nazwy? Jednak to rozwiązanie działało dla mnie. Brakowało plików * .g.cs i * .gics w folderze obj, komentując je i tworząc projekt wygenerując brakujące pliki. Nie jestem pewien, jak to się stało.
finlaybob
11

Ż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:

  1. Kliknij prawym przyciskiem myszy projekt, który powoduje problem w Eksploratorze rozwiązań. Z menu podręcznego wybierz: Dodaj -> Klasa
  2. Wybierz międzyplatformowy -> Formularze Xaml Page. Zachowaj ładną standardową nazwę Page1.cs i kliknij Dodaj.
  3. Zauważ, jak poprzedni problem InitializeComponent () - z jakiegoś powodu zniknął.
  4. Usuń nowo utworzony plik Page1.cs i kontynuuj programowanie, jakby Visual Studio działało dobrze.
Anders
źródło
Ten działał dla mnie. Zrobiłem kopiowanie i wklejanie i zmieniłem nazwę kontrolki użytkownika, którą miałem, kiedy InitializeComponent () zaczął się nie powieść.
Rafael Ventura
Jak, u licha, natknąłeś się na tę poprawkę? Próbowałem wszystkiego innego i to zadziałało. Używam VS 2017, więc problem jest aktualny.
blearyeye
Świetnie, to działa dla mnie. Dziękuję bardzo
IZI
9

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!

heights1976
źródło
Dodałbym
Dzięki za to! Pracował dla mnie po szaleństwie próbując różnych rzeczy. Moje rozwiązanie zostało zbudowane pierwotnie bez błędów, a następnie po tym, jak komputer spał przez chwilę, próbowałem ponownie i pojawiał się błąd. Może coś wspólnego z trybem uśpienia?
JeremyB,
Miałem ten sam problem i rozwiązanie. Uważam, że miało to coś wspólnego z IntelliSense. Zmiana przestrzeni nazw w xaml prawdopodobnie spowodowała aktualizację odpowiednich części w db IntelliSense. To tylko przypuszczenie.
FishySwede
8

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

Tonatio
źródło
Brawo dla pana!
naspinski
7

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.

Diego Venâncio
źródło
7

Rozładuj całe rozwiązanie, a następnie załaduj je ponownie. Następnie przebuduj rozwiązanie. To rozwiązało problem.

Eldhose
źródło
Dzięki działało dla mnie!
Izion,
6

Inną częstą przyczyną tego błędu jest zrobienie czegoś w tym:

  1. 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.

  2. 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”.

użytkownik1834059
źródło
5

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.

Mark McCorkle
źródło
Działa dwa razy;)
Flou
4

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.

bjhuffine
źródło
3

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.

Richard Beier
źródło
Otrzymałem ten sam błąd z powodu brakującego atrybutu x: Class, ale nie miało to nic wspólnego z Nuget. Po prostu jakoś zniknęło, prawdopodobnie jakaś magia studia wizualnego.
Ismail Degani
3

To rozwiązało dla mnie.

Skomentowałem zasoby w pliku App.xaml

<Application x:Class="MyApp.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Application.Resources>
    <!--<ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary
            Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>-->
  </Application.Resources>
</Application>

Skomentowanie tego z powrotem w celu naprawienia błędu kompilacji.

<Application x:Class="MyApp.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Application.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary
            Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </Application.Resources>
</Application>

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.

/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public void InitializeComponent() {
    if (_contentLoaded) {
        return;
    }
    _contentLoaded = true;
    System.Uri resourceLocater = new System.Uri("/MyApp;component/app.xaml", System.UriKind.Relative);

    #line 1 "..\..\..\App.xaml"
    System.Windows.Application.LoadComponent(this, resourceLocater);

    #line default
    #line hidden
}
bic
źródło
3

Dla tych, którzy znajdą to w Internecie. Sprawdź plik Windows.csproj, jeśli jest tam kompilacja. Powinny być 2 wpisy

<Page Include="YourFile.xaml">
  <SubType>Designer</SubType>
  <Generator>MSBuild:Compile</Generator>
</Page>

<Compile Include="YourFile.xaml.cs">
  <DependentUpon>YourFile.xaml</DependentUpon>
</Compile>
acsadam0404
źródło
W moim csproj z <DependentUpon>YourFile.xaml</DependentUpon>jakiegoś powodu brakowało mi tego i właśnie to mnie naprawiło!
Isaac Baker
3

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

Syed Siraj Wajeed
źródło
masz na myśli otwierające i zamykające studio graficzne?
LuckyLikey
Czasami XDesProc.exe (Microsoft Visual Studio XAML UI Designer) zatrzyma Visual Studio do poprawnego działania i nie załaduje poprawnie pliku xaml. Ponowne uruchomienie programu Visual Studio rozwiązało mój problem. (Możesz także przejść do Procesów w Menedżerze zadań i zatrzymać tylko ten proces bez ponownego uruchamiania programu Visual Studio).
Syed Siraj Wajeed
Odkryłem to w VS2017. Zmieniłem wszystko inne i przestrzenie nazw były poprawne wszędzie, ale wywołania InitializeComponent () zawierały błąd, a częściowe słowa kluczowe w plikach xaml.cs zawierały ostrzeżenie, coś w rodzaju „klasa częściowa ma tylko jeden plik”. Zdarzyło mi się zamknąć i ponownie otworzyć rozwiązanie i odkryłem, że oba te problemy rozwiązały się same.
Steve Crane,
3

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.

Mauro Sampietro
źródło
3

Odkryłem, że „obiekt startowy” był (nieustawiony), powodując ten błąd.

„Obiekt startowy” (nieustawiony)

Skała
źródło
Wszystkie inne szczegóły wymienione w pytaniu były takie same?
marklark
2
Dokładne szczegóły nie są dokładne, biorąc pod uwagę, że pytanie nie było jasne, w jaki sposób pojawił się wyjątek. Jednak podstawowy objaw jest identyczny, dlatego nie widzę nic złego w mojej odpowiedzi. Moim zamiarem było dodanie do rozmowy, ponieważ w mojej sprawie nie pomogła żadna odpowiedź / komentarz. Próbowałem jedynie uzupełnić bazę wiedzy o często nieokreślone błędy kompilacji.
Rock,
1
Dzięki! To rozwiązało mój problem! Wygląda na to, że podana opcja ( obiekt startowy ) została zresetowana automatycznie po przeniesieniu pliku MainWindow.xaml z rootdo Viewkatalogu.
AlexMelw
3

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:

<Controls:MetroWindow x:Class="ProjectNamespace.MyView"
                      xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
                      ... >

Teraz zdefiniowałem moje zasoby statyczne jako

<Controls:MetroWindow.Resources>
    <prop:Resources x:Key="LocalizedStrings"/>
    ...
</Controls:MetroWindow.Resources>

Tak zdefiniowałem Zasoby we UserControlwszystkich 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:

<Controls:MetroWindow.Resources>
    <ResourceDictionary>
        <prop:Resources x:Key="LocalizedStrings"/>
        ...
    </ResourceDictionary>
</Controls:MetroWindow.Resources>

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).

Tomek Ladek
źródło
2

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ę.

JD Ray
źródło
2

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.

Piotr
źródło
2

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:

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

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.

Jon Nos
źródło
2

Z jakiegoś powodu po skopiowaniu .xaml i .cs między projektami akcja kompilacji czasami się zmienia. Upewnij się, że kompilacja twojego .xaml to Page.

Marek Malczewski
źródło