ชื่อ 'InitializeComponent' ไม่มีอยู่ในบริบทปัจจุบัน


383

ถ้าฉันสร้างโครงการใหม่ใน Visual Studio 2010 SP1 และเลือก "WPF Application" และพยายามสร้างแอปพลิเคชันที่สร้างขึ้นฉันจะได้รับข้อผิดพลาด

ชื่อ 'InitializeComponent' ไม่มีอยู่ในบริบทปัจจุบัน

ฉันได้รับข้อผิดพลาดที่คล้ายกันเมื่อเช้านี้เมื่อฉันพยายามสร้างโครงการปัจจุบันของฉัน เมื่อวานฉันไม่มีปัญหาในการรวบรวมและเรียกใช้

ฉันสร้างโครงการใหม่และได้รับข้อผิดพลาดเมื่อใดก็ตามที่ฉันรวบรวมโครงการ ฉันเพิ่งส่งโครงการไปให้เพื่อนร่วมงานและเขาเพิ่งคอมไพล์โดยไม่มีข้อผิดพลาดใด ๆ

เกิดอะไรขึ้น?


3
"ข้อผิดพลาด" ของผู้ใช้นี้ดูเหมือนว่าง่ายต่อการแก้ไขเพียงแค่นิยาม x: Class ที่เหมาะสม ผู้พัฒนาควรให้ความสนใจมากขึ้น แต่จะเกิดอะไรขึ้นถ้าไม่ใช่ข้อผิดพลาดนี้ แต่เป็นข้อผิดพลาดผีที่มีข้อความแสดงข้อผิดพลาดเดียวกัน ฉันอ่านการแก้ปัญหาวูดูที่แตกต่างกันมากมายตั้งแต่ปี 2012 มันจะช่วยได้จาก VS ข้อผิดพลาดที่ชัดเจนมากและแน่นอนว่าเป็นข้อผิดพลาดของผีที่มีข้อความเดียวกัน นักพัฒนาตั้งแต่ปี 2012 เปลี่ยนการสร้างการกำหนดค่าจากไฟล์โครงการคัดลอกวางโครงการการลบไฟล์จากโฟลเดอร์แอพเริ่มการทำงานใหม่ VS ฯลฯ Bravo MS ... ข้อผิดพลาด 4 ปีและยังอายุมากขึ้น!
juagicre

2
สำหรับผู้อ่านในอนาคตของคำถามนี้: ปัญหานี้ดูเหมือนจะมีแหล่งข้อมูลมากมาย ในกรณีของฉันคำตอบแรก ๆ ไม่ได้ช่วยอะไร แต่หนึ่งในคำตอบต่อไปนั้นถูกต้อง
MOnsDaR

@MOnsDaR Namespace ของไฟล์ Designer เป็นปัญหาสำหรับฉัน
Ctrl S

แม้ว่าสิ่งนี้อาจเกิดจากหลายสิ่งหลายอย่าง (Namespace เปลี่ยนชื่อ \ Page type - MSBuild) ในที่สุดฉันก็พบวิธีแก้ปัญหาสำหรับสิ่งที่ทำให้เกิดในโครงการที่ฉันสืบทอด ในไฟล์. csproj ฉันต้องเปลี่ยน "ToolsVersion" จาก 4 เป็น 15 (VS 2017)
MrMikeJJ

คำตอบ:


737

ฉันพบสิ่งนี้สองสามครั้งและลืมสิ่งที่ทำให้เกิด ฉันพบปัญหานี้เมื่อฉันเปลี่ยนชื่อเนมสเปซบนรหัสของฉันหลังไฟล์ แต่ไม่ได้อยู่ใน XAML ของฉัน

ดังนั้นตรวจสอบว่าคุณได้ทำแบบเดียวกัน

namespaceและชั้นชื่อต้องตรงกับตั้งแต่พวกเขาทั้งสองเป็นส่วนหนึ่งของการเรียนบางส่วน

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

<!-- XAML -->
<Window x:Class="ZZZ.MainWindow">

10
ขอบคุณฌอน ฉันมาที่นี่เพื่อโพสต์คำตอบนี้ที่นี่ แต่คุณเอาชนะฉันไปแล้ว นี่คือสิ่งที่เกิดขึ้นและมันแก้ไขปัญหาของฉันได้ ความคิดเห็นของคุณควรจะสูงขึ้นเพราะมันจะช่วยฉัน 15 นาที
Magnum

2
หากชื่อชั้นไม่เหมือนกันคุณจะได้รับข้อผิดพลาดเดียวกัน
reggaeguitar

2
นี่คือคำตอบ ไม่แน่ใจว่าทำไมมันถึงไม่ถูกเลือก แต่มันเป็นแบบนั้นและฉันวิ่งเข้าไปหารหัส Xamarin.Forms นี้
Marcus Shockley

1
เมื่อทำการปรับโครงสร้างใหม่ตรวจสอบให้แน่ใจว่าได้รวมข้อคิดเห็นและสตริง (Visual Studio 2015)
Gabriel GM

3
สำหรับฉัน (ใน Xamarain.Forms) โดยใช้โครงการ "เริ่มต้นอย่างรวดเร็ว" ที่ดาวน์โหลดจาก Azure เป็นพื้นที่สีขาว / เยื้องระหว่าง xmlns: x = " schemas.microsoft.com/winfx/2009/xaml " และ x: Class ที่เป็น ปัญหา. ฉันลบสิ่งนี้แล้วพิมพ์ใหม่อีกครั้งและใช้งานได้!
James

241

Build Action สำหรับไฟล์. xaml ต้องถูกตั้งค่าเป็น "Page" เมื่อย้ายไฟล์ xaml ระหว่างโครงการการตั้งค่านี้จะสูญหาย (ใน VS 2010 เป็นอย่างน้อย)


11
นี่คือสิ่งที่เกิดขึ้นกับฉัน ขอบคุณ!
Ignacio Soler Garcia

3
หลังจากการคัดลอกวางเกิดขึ้นว่าการดำเนินการสร้าง xaml เปลี่ยนจากหน้าเว็บเป็นเนื้อหา
Roberto

4
ยังคงเกิดขึ้นใน Visual Studio 2012 (อัปเดต 2)
gumo

8
ยังคงเกิดขึ้นใน Visual Studio 2013
Chris Ray

7
อย่างจริงจัง ... ทำไมต้องเป็น Microsoft ทำไม? คุณเกลียดฉัน / พวกเราไหม
qwertoyo

106

สำหรับผู้ที่มีข้อผิดพลาดในโหมด Debug ไม่มี แต่ทำมีข้อผิดพลาดที่ระบุในโหมดรีลีส (และยังโครงการวิ่งดี) และนี่คือสิ่งที่ง่ายที่จะลอง:

  1. เปิดไฟล์ XAML ที่สอดคล้องกับไฟล์ xaml.cs ที่ละเมิด
  2. ทำการแก้ไข - แก้ไขใด ๆ เช่นเพิ่มช่องว่างที่ใดที่หนึ่ง
  3. บันทึกไฟล์และปิด

วิธีนี้ใช้ได้กับฉันใน VS 2015 และตามผู้ใช้รายอื่นเช่นกันในปี 2017 และ 2019


3
คุณคือฮีโร่ของฉันวันนี้ ขอบคุณ
Peter pete

14
อย่างบ้าคลั่งพอมันทำงานกับฉันด้วย VS2015 และแก้ไขข้อผิดพลาดทั้งหมดในไฟล์ XAML ทั้งหมด นี่เป็นช่วงเวลาที่น่าสนใจจริงๆ
William Denman

5
แดงฉันเพิ่งถูกเผาโดยคนนี้อีกครั้ง โชคดีที่ฉันพบคำตอบเดียวกับที่ฉันได้รับการโหวตและแสดงความคิดเห็นแล้ว ฉันควรจริง ๆ แต่นี่เป็นบันทึกการโพสต์บนหน้าจอของฉัน
William Denman

3
เช่นเดียวกันใน VS2017 และสิ่งนี้ทำให้มันคงที่
Hans

2
ยังคงใช้งานได้ใน VS2019 ...
Soulflyman

29
  1. นำทางไปยังไดเร็กทอรีโซลูชัน
  2. ลบโฟลเดอร์ \ obj
  3. สร้างโซลูชันใหม่

ฉันพบข้อผิดพลาดนี้ในระหว่างการทำการเปลี่ยนตำแหน่งที่ฉันเปลี่ยนชื่อไฟล์ / โฟลเดอร์และไฟล์ * .g.cs ที่ต้องสร้างใหม่


ดูเหมือนว่าฉันมีปัญหาเดียวกัน แต่นี่ไม่ได้ผลสำหรับฉัน
LuckyLikey

ทำเช่นนี้หลังจากการตรวจสอบ XAML ของคุณตรงกับx:Class Namespace.Class
Jake

TNX เคล็ดลับง่ายๆนี้ทำให้ฉัน
gil adino

26

มีเหตุผลที่เฉพาะเจาะจงมากสำหรับสิ่งนี้และอยู่ในการตั้งค่าโครงการ สิ่งนี้มักจะเกิดขึ้นทุกครั้งที่คุณพยายามเพิ่ม WPF control / window ในไลบรารีหรือโครงการ. NET 2.0 สาเหตุของข้อผิดพลาดนี้คือโครงการไม่ทราบว่ามันกำลังสร้างตัวควบคุม WPF หรือหน้าต่างดังนั้นจึงพยายามสร้างมันเป็นโครงการ C # 2.0

การแก้ปัญหาเกี่ยวข้องกับการแก้ไขไฟล์. csproj คลิกขวาที่โครงการที่ทำให้เกิดปัญหาและเลือก "ยกเลิกการโหลดโครงการ" คลิกขวาที่โครงการที่ไม่ได้โหลดและเลือก“ แก้ไข. csproj” ไฟล์. csproj จะเปิดขึ้นและคุณสามารถดู XML มองหาบรรทัดต่อไปนี้:

<Import Project=…..

ใกล้ถึงจุดสิ้นสุดของไฟล์และอาจเป็นบรรทัดเดียวที่คุณมี

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

นี่บอก Visual Studio เพื่อสร้างโครงการเป็นโครงการ. NET 2.0 สิ่งที่เราต้องการทำคือการบอก Visual Studio ว่านี่เป็นโครงการ WPF จริง ๆ ดังนั้นเราต้องเพิ่มบรรทัดต่อไปนี้:

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

บรรทัดนี้จะบอก Visual Studio เพื่อสร้างโครงการเป็นโครงการ WPF ตอนนี้ไฟล์. csproj ของคุณควรมีลักษณะดังนี้:

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

บันทึกไฟล์. csproj คลิกขวาในโซลูชัน Explorer และเลือกคอมไพล์“ รีโหลดโครงการ” และนั่นคือคุณเสร็จแล้ว!


1
ฉันลองสิ่งนี้ก่อนที่ฉันจะเขียนคำถามนี้ แต่ก็ไม่ได้ช่วยอะไร ฉันคิดว่ามันแปลกที่ฉันไม่สามารถรวบรวมโครงการใหม่ได้ แต่เพื่อนร่วมงานของฉันสามารถ ...
user876402

1
ฉันลองแล้วก็ไม่ได้ช่วยอะไร การเพิ่มการนำเข้าใหม่ทำให้เกิดคำเตือนใหม่ (ดูด้านล่าง) แต่ข้อผิดพลาดเดิมยังคงอยู่ที่นั่น "C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.WinFX.targets" ไม่สามารถนำเข้าอีกครั้ง มีการนำเข้าแล้วที่ "C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.NETFramework.targets (76,3)" นี่เป็นข้อผิดพลาดในการเขียนบิลด์ การนำเข้าที่ตามมานี้จะถูกละเว้น "
user316117

ฉันแค่ลองมัน แต่มันใช้งานไม่ได้ ... ?
Sizons

ขอบคุณสิ่งนี้ได้รับการแก้ไขสำหรับฉันในโครงการที่ฉันสืบทอดมา
MrMikeJJ

22

สิ่งนี้เกิดขึ้นกับฉันเมื่อฉันลบการอ้างอิงชั้นเรียนออกจากคำจำกัดความของ xaml:

ฉันได้เปลี่ยน

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

บรรทัดแรกด้วยสิ่งนี้:

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

ฉันรู้ว่านี่ไม่ใช่คำตอบสำหรับคำถามเดิม (เพราะโครงการสร้างบนเครื่องอื่น) แต่ข้อความแสดงข้อผิดพลาดเหมือนกันดังนั้นฉันอาจช่วยคนที่มีสถานการณ์นี้


นี่ไม่ใช่ปัญหาของฉันอย่างแน่นอน แต่มันช่วยให้ฉัน จำกัด วงได้ ฉันมีเนมสเปซที่ไม่มีชื่อคลาสหลังจากนั้น
Rivenfall

สิ่งนี้ใช้ได้สำหรับฉัน ขอบคุณ
Sinaesthetic

สิ่งนี้ช่วยให้ฉันค้นพบปัญหาของฉันในกรณีของฉันฉันหายไปจากบรรทัด x: Class เพิ่มสิ่งนี้ในการแก้ไขสำหรับฉัน
apc

18

คุณอาจได้รับข้อผิดพลาดนี้เมื่อคุณนำเข้าคลาสจากโครงการอื่นหรือเปลี่ยนเส้นทางของไฟล์ xaml หรือเนมสเปซของไฟล์ xaml หรือด้านหลังไฟล์. cs

หนึ่ง:มันอาจมีเนมสเปซที่ไม่เหมือนกับสิ่งที่คุณมีในโครงการใหม่ของคุณ

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

ตามที่คุณเห็นพื้นที่ชื่อในไฟล์ที่นำเข้าเริ่มต้นด้วยชื่อโครงการเก่า: "TrainerB"แต่โครงการใหม่ของคุณอาจมีชื่อแตกต่างกันดังนั้นเพียงเปลี่ยนเป็นชื่อโครงการใหม่ที่ถูกต้องทั้งในไฟล์. xaml และ ไฟล์. cs เบื้องหลัง

สอง:

เปลี่ยนคุณสมบัติของไฟล์. xaml เป็น:

สร้างการกระทำ:ทรัพยากรที่ฝังตัว

เครื่องมือที่กำหนดเอง: MSBuild: UpdateDesignTimeXaml

คุณสมบัติไฟล์ Xaml

การแก้ไขเนมสเปซ Xaml 01

การแก้ไขเนมสเปซ Xaml 02


พระเจ้าช่วย! ขอบคุณจริง ๆ สำหรับวิธีแก้ปัญหานั้น ฉันทดสอบทุกวิธีแก้ปัญหาที่พบที่นั่นและไม่มีอะไรทำงาน เคล็ดลับอยู่ในคุณสมบัติของxamlไฟล์ +1
IgniteCoders

16

ตรวจสอบให้แน่ใจในไฟล์ xaml

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

ตรงกับชื่อ 'Project1' และชื่อ 'Page1'


นี่เป็นการแก้ไขปัญหาของฉัน
octavian

16

ตรวจสอบผู้ออกแบบไฟล์

ฉันมีปัญหาเดียวกันนี้ ในกรณีของฉันสาเหตุคือว่าnamespaceสำหรับFileName.Designer.csไม่ตรงกับ (ถูกต้อง) ที่namespaceใช้ในFileName.cs FileName.cs

การเปลี่ยนnamespaceของFileName.Designer.csให้ตรงกับที่FileName.csแก้ไขปัญหาได้ทันที


14

ฉันมีสิ่งนี้ (แม้ว่ามันจะเป็นความผิดของฉันอย่างมากและเกิดขึ้นหลังจากที่ฉันคัดลอกและวางรหัสใน); มันสามารถเกิดขึ้นได้เมื่อเนมสเปซไม่ตรงกันระหว่าง XAML และโค้ดด้านหลัง

เช่น

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

และรหัสที่อยู่เบื้องหลังคือ

namespace NotDockPanel

สิ่งนี้ทำให้ฉันค้นพบว่าผู้ออกแบบของฉันมีเนมสเปซที่ไม่ถูกต้อง ขอบคุณ!
Ctrl S

13

ฉันพบสิ่งนี้ขณะเปลี่ยนชื่อผู้ใช้ วิธีที่ฉันแก้ไขคือการคอมเม้นต์ InitializeComponent ตรวจสอบว่าชื่อทั้งหมดถูกต้อง (xaml และโค้ดด้านหลัง) สร้างโครงการไม่คอมเม้นต์ InitializeComponent จากนั้นสร้างอีกครั้ง ดูเหมือนว่าอาจมีสาเหตุ / วิธีแก้ไขปัญหานี้สองสามข้อ แต่วิธีนี้ทำเพื่อฉัน


1
ฉันไม่ได้เปลี่ยนชื่ออะไรเลย? อย่างไรก็ตามวิธีนี้ใช้ได้ผลสำหรับฉัน * .g.cs และ * .gics หายไปในโฟลเดอร์ obj แสดงความคิดเห็นและสร้างโครงการสร้างไฟล์ที่หายไป ไม่แน่ใจว่ามันเข้าสู่สถานะนี้ได้อย่างไร
finlaybob

11

คำตอบข้างต้นไม่เหมาะกับฉัน ฉันลองพวกเขาทั้งหมดยกเว้นที่ซ้ำกัน อย่างไรก็ตามด้วยเหตุผลแปลก ๆ บางอย่างนี้ทำงานในโครงการข้ามแพลตฟอร์มของฉันใน Visual Studio 2015:

  1. คลิกขวาที่โครงการที่ทำให้เกิดปัญหาใน Explorer โซลูชัน ในเมนูป๊อปอัปเลือก: เพิ่ม -> คลาส
  2. เลือกข้ามแพลตฟอร์ม -> Forms Xaml Page รักษาชื่อมาตรฐาน Page1.cs ที่น่ารักไว้แล้วคลิกเพิ่ม
  3. ขอให้สังเกตว่า InitializeComponent () ก่อนหน้า - ปัญหาหายไปด้วยเหตุผลบางประการ
  4. ลบ Page1.cs ที่สร้างขึ้นใหม่และดำเนินการเขียนโปรแกรมราวกับว่า Visual Studio ใช้งานได้ดี

อันนี้ใช้ได้สำหรับฉัน ฉันได้คัดลอกและวางและเปลี่ยนชื่อผู้ใช้ที่ฉันมีเมื่อ InitializeComponent () เริ่มล้มเหลว
Rafael Ventura

คุณเจอปัญหานี้บนโลกได้อย่างไร? ฉันลองทุกอย่างและใช้งานได้ ใช้ VS 2017 ดังนั้นปัญหาจึงเป็นปัจจุบัน
blearyeye

เยี่ยมมากมันใช้งานได้สำหรับฉัน ขอบคุณมาก
IZI

9

ฉันเห็นด้วยกับคำตอบข้างต้นที่เนมสเปซต้องตรงกัน อย่างไรก็ตามฉันมีปัญหาเช่นนี้ซึ่งเนมสเปซตรงกัน

ในการแก้ไขฉันเพียงแค่เปลี่ยน namespace ใน XAML เป็น INCORRECT หนึ่งที่บันทึกไว้จากนั้นเปลี่ยนกลับเป็น CORRECT อันที่หนึ่ง Voila!


ฉันจะเพิ่มนี่เป็นความคิดเห็นในคำตอบที่ถูกต้อง แต่ฉันไม่มีตัว
แทนที่จะ

ขอบคุณสำหรับสิ่งนี้! ทำงานให้ฉันหลังจากคลั่งไคล้พยายามทำทุกสิ่ง โซลูชันของฉันสร้างขึ้นครั้งแรกโดยไม่มีข้อผิดพลาดหลังจากนั้นพีซีก็หลับไปสักพักแล้วลองอีกครั้ง อาจเกี่ยวข้องกับโหมดสลีปหรือไม่
JeremyB

ฉันมีปัญหาและวิธีแก้ไขปัญหาเดียวกัน ฉันเชื่อว่ามีส่วนเกี่ยวข้องกับ IntelliSense การเปลี่ยนเนมสเปซใน xaml อาจทำให้เกิดการอัปเดตชิ้นส่วนที่เกี่ยวข้องใน IntelliSense db นี่เป็นเพียงการคาดเดา
FishySwede

8

หากคุณกำลังใช้แบบฟอร์ม Xamarin และคุณย้ายไฟล์ XAML "การดำเนินการสร้าง" ของไฟล์จะเปลี่ยนไป แบบฟอร์ม Xamarin ต้องการ "build action = Embedded Resource"

ใช้ "บิลด์แอ็คชัน" ใน Visual Studio:

Select the XAML file -> Properties -> Build Action = Embedded Resource


ไชโยให้คุณ Sir / Madam!
naspinski

7

ฉันลองคำแนะนำทั้งหมดข้างต้น ถ้าคุณลองไม่สำเร็จก็จะได้วิธีที่ง่ายกว่านี้ สร้าง page.xaml ใหม่จากนั้นคัดลอกรหัสของคุณสำหรับคลาสใหม่และลบคลาส XAML ที่มีปัญหา อย่าใช้เวลามากขึ้น


7

ยกเลิกการโหลดโซลูชันทั้งหมดแล้วโหลดซ้ำอีกครั้ง จากนั้นสร้างโซลูชันใหม่ การแก้ไขปัญหาสำหรับฉัน


ขอบคุณที่ทำงานให้ฉัน!
Izion

6

สาเหตุทั่วไปอีกประการของข้อผิดพลาดนี้คือถ้าคุณทำสิ่งนี้:

  1. คลิกขวาที่โฟลเดอร์ในโครงการเพื่อสร้าง UserControl ใหม่ สิ่งนี้สร้างคลาสและไฟล์ xaml ที่เกิดจากการควบคุมผู้ใช้ในเนมสเปซของโฟลเดอร์

  2. จากนั้นคุณตัดสินใจที่จะเปลี่ยนเนมสเปซของชั้นเรียนเพราะคุณเพียงแค่ใช้โฟลเดอร์สำหรับจัดระเบียบรหัส แอ็ตทริบิวต์ x: Class จะไม่ได้รับการอัปเดตโดยอัตโนมัติดังนั้นมันจะค้นหาคลาสที่ไม่มีอยู่ อาจใช้ข้อความแสดงข้อผิดพลาดที่ดีกว่าเช่น "x: ไม่พบประเภทคลาสใน namesace bla.blaa.blaaa"


5

วิธีแก้ไขปัญหานี้ก็คือการเปลี่ยนคุณสมบัติ -> Build Action บน XAML จาก Embedded Resource เป็นสิ่งอื่นแล้วบันทึกจากนั้นเปลี่ยนกลับไปเป็น Embedded Resource ข้อผิดพลาดหายไป


มันทำงานสอง;)
Flou

4

ฉันรู้ว่าสิ่งนี้ได้รับการตอบเนื่องจากสาเหตุที่แตกต่างกัน แต่นี่เป็นการโพสต์ที่ได้รับความนิยมสูงและฉันพบปัญหาเดียวกันกับไลบรารีคลาส ในกรณีนี้มันกลายเป็นทั้งการเปลี่ยนแปลงในเนมสเปซของฉัน (ตอบในโพสต์นี้ที่นี่ ) และคอมไพเลอร์ไม่สามารถสร้าง Window.gics ซึ่งกำหนดเมธอด InitializeComponent () เป็นไปไม่ได้เพราะไลบรารี่คลาสไม่มีค่า ProjectTypeGuid สำหรับโครงการ WPF ในไฟล์ csproj คำแนะนำสำหรับการนี้ที่นี่และที่นี่ ฉันคิดว่าฉันจะแบ่งปันในกรณีที่คนอื่นพบปัญหาเดียวกัน เพียงแค่เปลี่ยนเนมสเปซไม่เพียงพอในกรณีนี้


3

สิ่งนี้เกิดขึ้นกับฉันเนื่องจากตัวถอนการติดตั้งแพคเกจ Nuget ได้เป่าแอตทริบิวต์ทั้งหมดในองค์ประกอบ <Application> ใน App.xaml ซึ่งรวมถึงแอตทริบิวต์ x: Class ซึ่งระบุชื่อคลาสแอปพลิเคชัน ดังนั้นคลาสบางส่วนที่มีเมธอด InitializeComponent () จะไม่ถูกสร้างขึ้น

ฉันแก้ไขปัญหาด้วยการคืนค่า App.xaml ให้เป็นสำเนาที่ควบคุมโดยซอร์ส


ฉันได้รับข้อผิดพลาดเดียวกันเนื่องจากไม่มีแอตทริบิวต์ x: Class แต่ไม่มีอะไรเกี่ยวข้องกับ Nuget มันหายไปอย่างใดอาจเป็นเวทมนตร์ในสตูดิโอภาพ
Ismail Degani

3

วิธีนี้แก้ไขได้สำหรับฉัน

ฉันให้ความเห็นเกี่ยวกับทรัพยากรในไฟล์ 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>

การแสดงความคิดเห็นนี้กลับไปแก้ไขข้อผิดพลาดของการสร้าง

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

ขุดลึกลงไปอีกเล็กน้อยฉันพบว่าไฟล์ app.g.cs ใน {Project} \ obj \ debug มีสิ่งต่อไปนี้เฉพาะเมื่อฉันออกจากทรัพยากรที่แสดงความคิดเห็น

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

สำหรับผู้ที่พบสิ่งนี้บนอินเทอร์เน็ต ตรวจสอบไฟล์ Windows.csproj หากมีการรวบรวม ควรมี 2 รายการ

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

<Compile Include="YourFile.xaml.cs">
  <DependentUpon>YourFile.xaml</DependentUpon>
</Compile>

ใน csproj ของฉันฉันหายไป<DependentUpon>YourFile.xaml</DependentUpon>ด้วยเหตุผลบางอย่างและนี่คือสิ่งที่แก้ไขให้ฉัน!
Isaac Baker

3

หาก Namespaces นั้นถูกต้องแสดงว่ามีข้อผิดพลาดเดียวกัน

เพียงปิดแอปพลิเคชันของคุณและเปิดอีกครั้งเพียงแค่ปิดโปรแกรมของคุณและเปิดอีกครั้ง

วิธีนี้อาจช่วยแก้ปัญหาของคุณได้


สตูดิโอภาพเปิดและปิดคุณหมายถึงอะไร?
LuckyLikey

บางครั้ง XDesProc.exe (Microsoft Visual Studio XAML UI Designer) จะหยุด Visual Studio ให้ทำงานอย่างถูกต้องและจะไม่โหลดไฟล์ xaml อย่างถูกต้อง ดังนั้นการรีสตาร์ท Visual Studio จึงช่วยแก้ปัญหาของฉันได้ (คุณสามารถไปที่กระบวนการในตัวจัดการงานและหยุดเฉพาะกระบวนการนั้นโดยไม่ต้องเริ่มต้น Visual Studio ใหม่)
Syed Siraj Wajeed

ฉันค้นพบสิ่งนี้ใน VS2017 ฉันเปลี่ยนทุกอย่างและเนมสเปซนั้นถูกต้องทุกที่ แต่การโทร InitializeComponent () มีข้อผิดพลาดและคำหลักบางส่วนในไฟล์ xaml.cs มีคำเตือนบางอย่างเช่น "คลาสบางส่วนมีเพียงไฟล์เดียว" ฉันเกิดขึ้นเพื่อปิดและเปิดโซลูชันอีกครั้งและค้นพบปัญหาทั้งสองนี้แก้ไขได้ด้วยตนเอง
Steve Crane

3

หลังจากการดำเนินการบางอย่างเนมสเปซของไฟล์. cs และหนึ่งในไฟล์. xaml อาจแตกต่างกัน (ใน xaml ค้นหา x: Class = "namespace.yourType")

แก้ไขให้เหมือนกัน


3

ฉันได้ค้นพบว่า "วัตถุเริ่มต้น" เป็น (ไม่ได้ตั้งค่า) ทำให้เกิดข้อผิดพลาดนี้สำหรับฉัน

"วัตถุเริ่มต้น" (ไม่ได้ตั้งค่า)


ข้อมูลเฉพาะอื่น ๆ ทั้งหมดที่กล่าวถึงในคำถามนั้นเหมือนกันหรือไม่
marklark

2
ข้อมูลจำเพาะที่แน่นอนไม่ถูกต้องเนื่องจากคำถามไม่ชัดเจนว่าข้อยกเว้นปรากฏอย่างไร อย่างไรก็ตามอาการพื้นฐานนั้นเหมือนกันดังนั้นฉันไม่เห็นอะไรผิดปกติกับคำตอบของฉัน ความตั้งใจของฉันคือการเพิ่มการสนทนาโดยไม่มีคำตอบ / ความคิดเห็นช่วยในกรณีของฉัน ฉันแค่พยายามเพิ่มฐานความรู้สำหรับข้อผิดพลาดในการคอมไพล์ครั้ง nondescript บ่อยครั้ง
Rock

1
ขอบคุณ! มันแก้ไขปัญหาของฉัน! ดูเหมือนว่าตัวเลือกที่กำหนด ( วัตถุเริ่มต้น ) ถูกรีเซ็ตโดยอัตโนมัติเมื่อฉันย้าย MainWindow.xaml จากrootไปยังViewไดเรกทอรี
AlexMelw

3

เนื่องจากนี่เป็นเธรดแบบไปสู่ปัญหาที่หายไป 'InitializeComponent' ฉันจะรวมคำตอบของฉันไว้ที่นี่

ฉันก็มีปัญหานี้เช่นกันและฉันก็ลองทุกอย่างที่ฉันพบที่นี่และในฟอรัมอื่น ๆ ที่ Google หาได้ แต่ก็ไม่มีใครแก้ปัญหาให้ฉันได้ หลังจากสองชั่วโมงของการลองทุกอย่างในที่สุดฉันก็พบว่ามีอะไรผิดปกติกับฉันการตั้งค่า

ในโครงการของเราเราจะใช้ส่วนประกอบจากเมโทรMahApps มุมมองที่ทำให้ฉันมีปัญหาคือมุมมองที่สืบทอดจาก MetroWindow เช่นนี้

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

ตอนนี้ฉันได้กำหนดทรัพยากรคงที่ของฉันเป็น

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

นั่นคือวิธีที่ฉันได้กำหนดทรัพยากรไว้ UserControlมุมมองอื่น ๆ ของฉันดังนั้นนั่นคือสิ่งที่ฉันคิดว่าจะใช้งานได้

อย่างไรก็ตามนั่นไม่ใช่กรณีด้วยControls:MetroWindow! มีฉันต้องการคำจำกัดความทรัพยากรอย่างแน่นอนดังนี้:

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

โดยสรุปแล้วปัญหาของฉันคือ<ResourceDictionary>แท็กที่ขาดหายไป ฉันไม่รู้จริงๆว่าทำไมสิ่งนี้จึงทำให้เกิดข้อผิดพลาด 'InitializeComponent' และมันก็ไม่ได้ทำให้เกิดข้อผิดพลาดในเครื่องของฉันทุกเครื่อง แต่นั่นเป็นวิธีที่ฉันจะแก้ไข หวังว่านี่จะช่วยได้ (คนที่เหลืออีก 0.001% ที่พบปัญหานี้)


2

ฉันเพิ่งพบปัญหานี้และกลายเป็นว่าโครงการของฉันถูกเก็บไว้ในโฟลเดอร์ผู้ใช้ของฉันซึ่งถูกเก็บไว้ในเครือข่ายและเรามีเครือข่ายหยุดทำงานชั่วคราว ฉันสร้าง มันบ่นว่าไฟล์ของฉันได้รับการแก้ไขนอกตัวแก้ไข (พวกเขาไม่ได้; ไฟล์ล็อคเพิ่ง borked) และมันก็สร้างขึ้นได้ดีเอาข้อผิดพลาดเกี่ยวกับInitializeComponent()วิธีการ

BTW ในกรณีที่คุณสงสัยว่าการพัฒนาบางอย่างจากไดรฟ์เครือข่ายเป็นการฝึกฝนที่ไม่ดี มันจะกลายเป็นปัญหาโดยเฉพาะอย่างยิ่งเมื่อคุณพยายามใช้ประโยชน์จากรหัสที่มีการจัดการของ. NET จากประสบการณ์ของฉันมันทำให้ประหลาดทุกครั้งที่คุณสร้าง ฉันลืมใส่โปรเจคเล็ก ๆ น้อย ๆ นี้ลงในโฟลเดอร์ที่ถูกต้องและจบลงด้วยการจ่ายราคา


2

อีกคำอธิบายที่เป็นไปได้คือคุณกำลังต่อต้าน x86 คลิกขวาที่โซลูชันของคุณแล้วเลือกเครื่องมือจัดการการกำหนดค่า ดูว่าคุณกำลังสร้างกับ x86 แทนที่จะเป็น CPU ใด ๆ หรือไม่


2

ดังนั้นฉันจึงรู้ว่านี่เป็นคำถามที่เก่ากว่า แต่เรามีปัญหาที่คล้ายกัน เราสามารถสร้างโครงการโดยใช้ VS2012 แต่ไม่สามารถใช้ msbuild จากบรรทัดคำสั่ง ฉันไปที่ไฟล์. proj และสังเกตว่าไม่มีบันทึกสำหรับ "ProjectTypeGuids" ภายใต้ส่วน "PropertyGroup" เริ่มต้นดังนั้นฉันจึงเพิ่มสิ่งนี้:

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

ซึ่งเป็นโครงการ GUID สำหรับ WPF ฉันลบและเพิ่ม UserControl แล้วและมันก็เริ่มทำงานอีกครั้ง ฉันไม่แน่ใจว่าฉันต้องทำขั้นตอนสุดท้ายหรือไม่ แต่ตอนนี้ใช้ได้สำหรับฉันแล้ว


2

เนื่องจากเหตุผลบางประการหลังจากการคัดลอก. xaml และเป็น. cs ระหว่างโครงการบางครั้งการสร้างบิลด์จึงเปลี่ยนไป โปรดตรวจสอบให้แน่ใจว่า build action ของ. xaml คือ Page

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.