Menggunakan VS2012 bekerja pada aplikasi WPF VB.NET. Saya memiliki aplikasi tutorial MusicPlayer sederhana yang saya gunakan untuk mempelajari WPF. Saya mengubah versi C # dari tutorial ke VB.NET selangkah demi selangkah.
Ini memiliki 2 kelas dalam aplikasi yang keduanya berada di bawah namespace yang sama. Saya bisa mereferensikan namespace di XAML tetapi ketika saya mencoba untuk mereferensikan objek kelas di XAML saya mendapatkan kesalahan dan saya tidak dapat mengkompilasi.
Hal yang aneh adalah bahwa IntelliSense berfungsi dengan baik dengan mereferensikan namespace melalui tag xmlns: c = dan juga saat mengetik objek kelas menggunakan <c:
Tapi objek digarisbawahi dan kesalahan dihasilkan saat mencoba membangun atau bekerja di desainer.
File kelas .vb berada dalam folder bernama \ Controls. Root Namespace proyek utama sengaja dikosongkan. Kelas diberi kode seperti ini ...
Namespace MusicPlayer.Controls
Public Class UpdatingMediaElement
.... code here
End Public
End Namespace
Xaml terlihat seperti ini
(namespace ditentukan dalam <Window >
tag
xmlns:c="clr-namespace:MusicPlayer.Controls"
(objek didefinisikan dalam a <Grid>
)
<c:UpdatingMediaElement Name="MyMediaElement" />
(kesalahan ditampilkan) Nama "UpdatingMediaElement" tidak ada di namespace "clr-namespace: MusicPlayer.Controls".
Tidak yakin apa yang salah atau bagaimana cara memperbaikinya?
sumber
Jawaban:
Saat Anda menulis kode wpf dan VS katakan bahwa "Nama ABCDE tidak ada di namespace clr-namespace: ABC". Tetapi Anda benar-benar dapat membangun proyek Anda dengan sukses, hanya ada sedikit ketidaknyamanan karena Anda tidak dapat melihat perancangan UI (atau hanya ingin membersihkan kode).
Coba lakukan ini:
Di VS, klik kanan pada Solusi Anda -> Properti -> Properti Konfigurasi
Dialog baru terbuka, coba ubah konfigurasi proyek dari Debug menjadi Rilis atau sebaliknya.
Setelah itu, bangun kembali solusi Anda. Itu bisa menyelesaikan masalah Anda.
sumber
Jika assembly berbeda dari namespace di mana kelas Anda berada, Anda harus menentukannya secara eksplisit.
ex:-
sumber
Saya telah melihat masalah ini hilang dengan membersihkan Cache Bayangan Desain Xaml. Saya memiliki masalah dengan Visual Studio 2015 Update 1.
Dalam Visual Studio 2015 Cache terletak di sini:
Proses:
Dan voila tidak ada lagi kesalahan namespace.
sumber
Dalam kasus saya itu karena kesalahan kompilasi lainnya . Ketika kesalahan lain telah diselesaikan, kesalahan yang tampaknya terkait ini juga dihapus dari daftar. Khususnya kesalahan di bagian bawah daftar kesalahan dan pada halaman yang baru saja Anda ubah.
sumber
Coba ubah platform target build ke x86 dan buat proyek.
Saya perhatikan melalui Subversion bahwa saya tampaknya mengubah target platform pembangunan proyek ke x64. Ini adalah satu-satunya perubahan yang saya buat. Setelah melakukan perubahan itu, kode itu berfungsi sebentar sebelum mulai menunjukkan kesalahan yang sama dengan yang Anda alami. Saya mengubah target platform ke x86 untuk diuji dan tiba-tiba desainer saya bekerja kembali. Selanjutnya, saya mengubahnya kembali ke x64, dan masalahnya telah hilang sepenuhnya. Saya menduga bahwa perancang membangun semacam kode yang di-cache di x32 dan mengubah platform pembuatan x64 memecahnya ketika Anda membuat perubahan kode.
sumber
Entah apakah ini akan membantu orang lain
Saya baru mengenal WPF dan masih pemula dengan VB.net - jadi saya berasumsi bahwa mendapatkan kesalahan ini disebabkan oleh saya melakukan KTT konyol ........ seandainya saya benar-benar! Saya telah berhasil menghilangkannya dengan memindahkan proyek saya dari drive bersama ke salah satu drive lokal saya. Kesalahan menghilang, proyek tidak mengkompilasi masalah lebih lanjut dengan sempurna - belum. Sepertinya VS2015 masih mengalami masalah dengan project yang diadakan di drive bersama.
sumber
Mungkin solusi lain ketika proyek dikompilasi tetapi kesalahan XAML muncul:
Tidak perlu membangun kembali, atau menutup studio visual.
sumber
Astaga ... Ini masih menjadi masalah lima tahun kemudian di Visual Studio 2017. Karena saya baru mengenal WPF, saya yakin masalahnya entah bagaimana saya, tapi tidak, semuanya terkompilasi dan berjalan dengan benar.
Saya mencoba membangun kembali, membersihkan dan membangun kembali, beralih antara keluaran x86 / x64, me-reboot Windows, membersihkan folder ShadowCache, menambahkan "; assembly = {my main assembly name}" ke deklarasi ruang nama XML, tidak ada yang berhasil! Satu hal yang berhasil:
Letakkan kelas Perintah statis saya (dalam kasus saya kesepakatannya adalah tentang membuat desain menemukan Perintah WPF saya) di rakitan terpisah dan mengubah nama rakitan menjadi yang itu.
sumber
Saya memiliki masalah yang sama, dan dalam kasus saya Tampilan Desain Markup meminta saya untuk membangun kembali solusi dan tidak menunjukkan kepada saya tata letak formulir dengan pesan ini:,
Design view is unavailable for x64 and ARM target platforms
atauBuild the Project to update Design view
.Ini tidak dapat diselesaikan dengan membangun kembali solusi (baik tampilan desain maupun kesalahan "Nama tidak ada di namespace")
Saya pikir itu karena saya telah bermain-main dengan pengaturan pada Solution -> Properties> Configuration Properties
Saya akhirnya menyelesaikan masalah dengan 2 pekerjaan:
Saya pikir itu bug dalam Visual Studio2012 Update 2.
sumber
Masalah yang sama melanda Visual Studios 2013, Service Pack 4. Saya juga mencobanya dengan Visual Studios 2015 Preview dengan hasil yang sama.
Itu hanya batasan dari visualizer WPF yang belum diperbaiki oleh tim Visual Studios. Sebagai bukti, membangun dalam mode x86 memungkinkan visualisator dan membangun dalam mode x64 menonaktifkannya.
Anehnya, Intellisense bekerja untuk Visual Studios 2013, Service Pack 4.
sumber
Saya mengalami masalah ini baru-baru ini menggunakan VS 2015 Update 3 untuk proyek WPF saya di .NET 4.6.2. Salinan proyek saya ada di folder jaringan , saya memindahkannya secara lokal dan itu menyelesaikan masalah.
Ini dapat menyelesaikan masalah lain, karena VS 2015 tidak menyukai jalur jaringan. Masalah lain yang menjadi masalah besar bagi mereka adalah menyinkronkan repositori git jika proyek saya berada di jalur jaringan, juga diselesaikan dengan memindahkannya secara lokal.
sumber
Sepertinya masalah ini bisa diselesaikan melalui berbagai "trik".
Dalam kasus saya, saya telah membangun / membangun kembali / membersihkan seluruh solusi, bukan hanya proyek yang saya kerjakan dalam solusi tersebut. Setelah saya mengeklik "Bangun [proyek saya]," pesan kesalahan menghilang.
sumber
Coba verifikasi referensi perakitan Anda. Jika Anda memiliki tanda seru kuning pada referensi proyek, ada masalah di sana dan Anda akan mendapatkan semua jenis kesalahan.
Jika Anda tahu referensi proyek sudah benar, periksa kerangka kerja Target. Misalnya, memiliki sebuah proyek yang menggunakan kerangka 4.5 merujuk sebuah proyek dengan kerangka 4.5.2 bukanlah kombinasi yang baik.
sumber
Solusi bagi saya adalah membuka blokir DLL perakitan. Pesan kesalahan yang Anda dapatkan tidak menunjukkan ini, tetapi desainer XAML menolak untuk memuat apa yang disebut rakitan "kotak pasir". Anda dapat melihat ini di jendela keluaran saat Anda membangun. DLL diblokir jika diunduh dari internet. Untuk membuka blokir DLL perakitan pihak ketiga Anda:
Catatan: Hanya buka blokir DLL jika Anda yakin itu aman.
sumber
Dalam kasus saya, kontrol pengguna telah ditambahkan ke proyek utama. Berbagai solusi di atas saya coba tidak berhasil. Entah saya akan mendapatkan Markup Tidak Valid tetapi solusinya akan dikompilasi dan berfungsi, atau saya akan menambahkan xmlns: c = "clr-namespace: MyProject; assembly = MyProject" dan kemudian markup akan ditampilkan, tetapi saya akan mendapatkan kesalahan kompilasi bahwa tag tidak ada dalam namespace XML.
Akhirnya, saya menambahkan proyek Perpustakaan Kontrol Pengguna WPF baru ke solusi dan memindahkan kontrol pengguna saya dari proyek utama ke proyek itu. Menambahkan referensi dan mengubah perakitan untuk menunjuk ke perpustakaan baru dan akhirnya markup bekerja dan proyek dikompilasi tanpa kesalahan.
sumber
Saya memeriksa semua jawaban dan tidak ada yang membantu saya. Akhirnya bisa menyelesaikannya sendiri, jadi menyajikan jawaban karena bisa membantu orang lain.
Dalam kasus saya, solusinya memiliki dua proyek, satu berisi model (katakanlah proyek dan nama rakitan adalah Model ) dan yang lainnya berisi tampilan dan model tampilan (sesuai konvensi kami: proyek, nama rakitan dan namespace default adalah Model.Monitor ) . Proyek Model.Monitor merujuk Model.
Dalam proyek Model.Monitor, di salah satu xaml saya menyertakan namespace berikut: xmlns: monitor = "clr-namespace: Models.Monitor"
Saya menduga bahwa MsBuild dan Visual Studio kemudian error karena mereka mencoba untuk menemukan tipe 'Monitor' dalam perakitan 'Model' . Untuk mengatasi saya mencoba yang berikut ini:
Tak satu pun dari yang di atas berhasil.
Akhirnya saya menyerah, dan sebagai solusi untuk memindahkan UserControl yang saya coba gunakan ke namespace lain: 'ModelsMonitor' . Saya bisa mengkompilasi dengan baik setelah itu.
sumber
Dalam kasus saya, saya memiliki namespace dan kelas yang dieja persis sama, jadi misalnya, salah satu namespace saya adalah
yang berisi kelasnya sendiri (misalnya firstDepth.secondDepth.Fubar.someclass)
tapi saya juga punya kelas ' Fubar ' di namespace
yang secara tekstual menyelesaikan sama dengan namespace Fubar di atas.
Jangan lakukan ini
sumber
Dalam kasus saya, masalahnya adalah karena beberapa file hantu di bawah direktori objek proyek. Hal berikut memperbaiki masalah saya:
sumber
Saya juga mengalami banyak masalah dengan yang ini! Intellisense membantu saya menyelesaikan namespace dan semuanya, tetapi compiler menangis. Saya sudah mencoba semua yang saya temukan di utas ini dan utas lainnya. Namun dalam kasus saya, yang membantu pada akhirnya adalah menulis sesuatu seperti ini:
Membiarkan nama assembly kosong. Tidak tahu kenapa. Tapi itu disebutkan di sini. Saya harus menambahkan bahwa saya sedang mengembangkan sebuah assembly, sehingga atribut assembly mungkin masuk akal. Tapi memasukkan nama perakitan tidak berhasil. Sangat aneh.
sumber
VB.NET tidak secara otomatis menambahkan informasi Namespace berdasarkan struktur folder seperti yang dilakukan di C #. Saya pikir saya akan melalui tutorial yang sama dengan Anda (Ajarkan Diri Anda WPF dalam 24 Jam), dan melakukan konversi yang sama ke VB.
Saya menemukan Anda harus secara manual menambahkan informasi Namespace untuk Kedua Kelas XAML dan kode XAML.VB belakang untuk dapat menggunakan Namespaces seperti yang dijelaskan dalam buku ini. Bahkan kemudian, VB tidak secara otomatis Menetapkan Namespace ke Majelis seperti yang dilakukannya di VB.
Ada artikel lain di sini yang menunjukkan bagaimana memasukkan ini ke dalam template proyek Anda sehingga itu membangun informasi Namespace secara otomatis - Secara otomatis menambahkan namespace ketika menambahkan item baru
sumber
Di halaman properti solusi, periksa platform rakitan yang berisi "UpdatingMediaElement" dan assmeblies yang berisi salah satu superclass dan antarmuka tempat subkelas atau implementasi "UpdatingMediaElement". Tampaknya platform semua rakitan ini harus "AnyCPU".
sumber
Kemungkinan penyebab lainnya: Peristiwa pasca-pembuatan menghapus proyek DLL dari folder pembuatan.
Untuk memperjelas: Desainer WPF dapat melaporkan "Nama XXX tidak ada di namespace ...", bahkan ketika nama tersebut memang ada di namespace dan proyek dibangun dan berjalan dengan baik jika acara pasca-pembangunan menghapus proyek DLL dari folder build (bin \ Debug, bin \ Release, dll.). Saya memiliki pengalaman pribadi dengan ini di Visual Studio 2015.
sumber
Oke, sayangnya tidak ada kiat ini yang berhasil untuk saya. Saya akhirnya bisa menyelesaikan masalah tersebut. Tampaknya Visual Studio tidak berfungsi baik dengan drive jaringan. Saya memecahkan masalah ini dengan memindahkan proyek dari drive bersama ke drive lokal saya dan mengompilasi ulang. Tidak ada lagi kesalahan.
sumber
Menambah tumpukan.
Tambang adalah nama perakitan aplikasi WPF adalah nama perakitan yang sama sebagai dll yang direferensikan. Jadi pastikan Anda tidak memiliki nama perakitan duplikat di salah satu proyek Anda.
sumber
Saya memiliki solusi yang disimpan di jaringan bersama dan setiap kali saya membukanya, saya akan mendapatkan peringatan tentang sumber yang tidak tepercaya. Saya memindahkannya ke drive lokal dan kesalahan "namespace tidak ada" juga hilang.
sumber
Coba juga klik kanan pada proyek Anda-> properti dan ubah target Platform ke Semua CPU dan bangun kembali, itu akan berfungsi. Ini berhasil untuk saya
sumber
Masalah ini juga dapat disebabkan jika rakitan yang Anda rujuk sebenarnya tidak dibuat. Misalnya, jika xaml Anda ada di Assembly1 dan Anda mereferensikan kelas juga di Assembly1, tetapi assembly itu memiliki kesalahan dan tidak membangun, kesalahan ini akan ditampilkan.
Saya merasa konyol tentang itu, tetapi dalam kasus saya, saya merobek kontrol pengguna dan memiliki semua jenis kesalahan di kelas terkait sebagai hasilnya. Ketika saya mencoba untuk memperbaiki semuanya, saya mulai dengan kesalahan yang dimaksud, tidak menyadari bahwa xaml bergantung pada rakitan yang dibangun untuk menemukan referensi ini (tidak seperti kode c # / vb yang dapat bekerja bahkan sebelum Anda membangunnya).
sumber
Saya telah menambahkan assembly sebagai proyek - pertama menghapus ddl yang ditambahkan secara khusus ke referensi ke dll - yang melakukannya.
sumber
Saya mendapatkan masalah ini sepanjang waktu. Pandangan saya ada dalam proyek Perpustakaan Kontrol Kustom WPF (varian pada Perpustakaan Kelas). Saya dapat merujuk rakitan yang dibuat sebelumnya, tetapi tidak dapat merujuk kode apa pun di proyek lain dengan solusi yang sama. Segera setelah saya memindahkan kode ke proyek yang sama dengan xaml, kode itu dikenali.
sumber
Dalam kasus saya, masalah ini akan terjadi ketika arsitektur program wpf tidak persis sama dengan ketergantungan. Misalkan Anda memiliki satu dependensi yaitu x64, dan dependensi lainnya adalah AnyCPU. Kemudian jika Anda memilih x64, tipe di AnyCPU dll akan "tidak ada", jika tidak tipe di x64 dll akan "tidak ada". Anda tidak bisa meniru keduanya.
sumber