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?


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">

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


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


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.


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!


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.


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


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”


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.


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

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.


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.

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!



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


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.


7

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


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


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.


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.


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.


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
}

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>

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


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.


3

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

„Obiekt startowy” (nieustawiony)


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


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


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.


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.


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.

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.