Nama tidak ada dalam kesalahan namespace di XAML


126

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?


13
Memulai ulang visual berhasil untuk saya. (jangan pernah meremehkan kekuatan memulai kembali)
Falaque

1
Sedikit bantuan bagi mereka yang bergumul dengan ini: pastikan kelas Anda terbuka untuk umum.
Borzh

Jawaban:


234

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.


4
Ini masih terjadi di Visual Studio 2015 Pembaruan 1. Solusi Anda berhasil - terima kasih!
Simon Smith

4
Mungkin tidak, tetapi saya menemukan bahwa hanya beralih antara mode Debug dan Rilis pada bilah alat berfungsi apa pun.
ketura

35
Dikonfirmasi pada VS 2017 versi 15.2 (26430.15) pada Juli 2017. Cukup diubah dalam dropdown dari Debug ke Rilis, dikompilasi dan kesalahan hilang, diubah kembali dan dikompilasi dan kesalahan masih hilang.
Tedd Hansen

7
Tampaknya VS17 sangat keras kepala - Mencoba mengubah Rel / Dbg, mengubah x64 / x86, menghapus ShadowCache, folder ComponentCache, Bin / Obj, masih memiliki "kesalahan" dan perancang tidak bekerja untuk aplikasi yang sangat kecil ini (aplikasi lain dengan seperti 50 tampilan WPF berfungsi dengan baik). Terjadi tiba-tiba dan tidak bisa pergi. Memiliki masalah ini sebelumnya berkali-kali tetapi pertama kali pada VS17 dan tidak dapat memperbaikinya sekarang. Tetap saja ini adalah jawaban terbaik karena berhasil berkali-kali sebelumnya.
bokibeg

7
Saya suka bagaimana saya kembali ke jawaban ini, dan saya telah memilihnya, ... 2,5 tahun yang lalu.
Mathieu Guindon

51

Jika assembly berbeda dari namespace di mana kelas Anda berada, Anda harus menentukannya secara eksplisit.

ex:-

xmlns:Local="clr-namespace:MusicPlayer.Controls;assembly=MusicPlayer"

1
Meskipun tampaknya telah menyelesaikan masalah saya pada awalnya, kesalahan yang sama masih muncul. Namun, sekarang saya bahkan tidak dapat membangun solusinya lagi.
Bouke

6
@bouke Bersihkan solusi dan bangun kembali
Vasanth Sriram

Luar biasa, terima kasih. Itu sangat membantu
Keith

Ini berhasil untuk saya. Hal yang aneh adalah bahwa konverter berada di rakitan yang sama dengan file xaml .... Tapi mereka berada di namespace yang berbeda.
Jonathan Alfaro

Terima kasih, perakitannya hilang.
Teroneko

31

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:

%localappdata%\Microsoft\VisualStudio\14.0\Designer\ShadowCache

Proses:

  1. Klik kanan pada solusi di Solution Explorer dan Pilih "Solusi Bersih"
  2. Matikan Visual Studio
  3. Hapus folder ShadowCache
  4. Membuka kembali proyek Visual Studio
  5. Bangun kembali solusi tersebut

Dan voila tidak ada lagi kesalahan namespace.


7
Sayangnya, tidak mengubah apa pun, bagi saya. Masih berurusan dengan hal yang menjengkelkan ini setelah hampir setahun penuh. : /
Khale_Kitha

3
Terima kasih! Ini akhirnya berhasil untuk saya. Sangat menyedihkan melihat trik ini masih diperlukan di VS15
Ocab19

4
Anda dapat menggunakan% localappdata% \ Microsoft \ VisualStudio \ 14.0 \ Designer \ untuk langsung membuka folder yang benar
Maxence

1
Memiliki desainer yang hanya berfungsi jika Anda membangun solusi itu buruk. Bayangkan jika seorang desainer mobil membangun seluruh mobil sebelum melihat desainnya.
Paul McCarthy

26

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.

Jadi jangan memperhatikan kesalahan ini secara langsung dan fokus pada kesalahan lain terlebih dahulu.


2
Perhatikan bahwa melakukan build / compile menyelesaikan masalah ini untuk saya, meskipun saya tidak memiliki kesalahan kompilasi yang tidak terkait lainnya. Sepertinya jendela XAML tidak selalu mengetahui kelas baru sampai Anda melakukan kompilasi.
HK1

1
Ini adalah saran terbaik bagi saya, tetapi karena @ HK1 terkadang tidak ada entri lain dalam daftar kesalahan kompilator ... tidak ada kesalahan dalam daftar tetapi ada kesalahan lain. Untuk melihatnya, beri komentar atau hapus baris yang ditandai dengan kesalahan namespace, kompilasi lagi dan kemudian Anda akan melihat kesalahan kompiler lainnya. Ubah mereka, dan baris sebelum ditandai dengan kesalahan namespace akan baik-baik saja saat Anda memulihkannya.
SERWare

Saya telah menghapus metode di belakang kode yang masih direferensikan di XAML. Setelah saya menghapus referensi, kesalahan ini hilang.
YarsRevenge13

23

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.


Saya telah mengalami ini berulang dan saya dapat mengonfirmasi bahwa ini menyelesaikan masalah untuk saya. Anda dapat beralih kembali ke x64 setelah Anda membuatnya di x86.
teynon

Ini bekerja untuk saya juga di VS 2012 ... setelah berjam-jam mencoba mencari tahu sesuatu yang logis. Terima kasih, Tom!
Bryan Greenway

Beralih ke x86 dan kembali ke x64 memperbaiki masalah di sini, jadi terima kasih telah menginspirasi saya untuk mencobanya. Saya bahkan telah menutup VS, menghapus bin dan obj, dan membangun kembali, bersama dengan saran lainnya, dan tidak ada yang membantu sampai ini.
Grault

Ya, ini juga berhasil untuk saya pada VS2015 Update 2. Namun, saya perlu memuat ulang file dll eksternal saya dan membangunnya kembali juga.
SezMe

Dengan VS2015U2, saya masih mendapatkan masalah ini di x64. Berfungsi dengan baik di Semua CPU. Beralih bolak-balik tidak berhasil untuk saya.
DaleyKD

7

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.


2
Ini adalah kasus saya, saya memindahkannya ke vm saya (di mana saya mengembangkan) dan boom tidak ada masalah. Terima kasih!
Mario Tacke

Ini adalah kasus saya juga tampaknya. Memindahkannya ke drive lokal (alih-alih berbagi jaringan - seperti yang diatur oleh Parallels untuk menyatukan sedikit sistem file Mac dan Windows), perbaiki masalah.
ckittel

7

Mungkin solusi lain ketika proyek dikompilasi tetapi kesalahan XAML muncul:

  1. Dalam eksplorasi solusi, pada node proyek yang berisi xaml
  2. Klik kanan pada proyek dan pilih 'Bongkar Proyek'
  3. Klik kanan pada proyek dan pilih 'Reload Project' Pastikan bahwa proyek Anda masih terpilih sebagai "proyek startup". Jika tidak :
  4. Klik kanan pada proyek dan pilih 'Set as startup project'

Tidak perlu membangun kembali, atau menutup studio visual.


6

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.


2

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 platformsatau Build 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:

  1. Mencentang semua kotak centang pada Build Column halaman: Solusi -> Properti -> Properti Konfigurasi
  2. Mengubah konfigurasi solusi dari Debug ke Rilis atau sebaliknya.

Saya pikir itu bug dalam Visual Studio2012 Update 2.


2

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.


2

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.


1

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.


1

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.


Dengan kata lain, versi .NET Framework proyek tidak boleh lebih lama dari versi .NET Framework proyek yang dirujuk.
icernos

1

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:

  1. Klik kanan pada file DLL di Windows Explorer dan pilih Properties.
  2. Di bagian bawah tab Umum, klik tombol "Buka Blokir" atau kotak centang.

Catatan: Hanya buka blokir DLL jika Anda yakin itu aman.


Ini berhasil untuk saya - Saya telah mengunduh proyek dari dropbox dan mendapatkan kesalahan. Saya juga harus menghapus ShadowCache
geometrikal

1

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.


1

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:

  1. xmlns: monitor = "clr-namespace: Models.Monitor; assembly =" - yang valid jika namespace berada dalam rakitan yang sama seperti https://msdn.microsoft.com/en-us/library/ms747086(v=vs .110) .aspx
  2. juga mencoba pernyataan ruang nama eksplisit: xmlns: monitor = "clr-namespace: Models.Monitor; assembly = Models.Monitor"

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.


1

Dalam kasus saya, saya memiliki namespace dan kelas yang dieja persis sama, jadi misalnya, salah satu namespace saya adalah

firstDepth.secondDepth.Fubar

yang berisi kelasnya sendiri (misalnya firstDepth.secondDepth.Fubar.someclass)

tapi saya juga punya kelas ' Fubar ' di namespace

firstDepth.secondDepth

yang secara tekstual menyelesaikan sama dengan namespace Fubar di atas.

Jangan lakukan ini


1

Dalam kasus saya, masalahnya adalah karena beberapa file hantu di bawah direktori objek proyek. Hal berikut memperbaiki masalah saya:

  • Proyek bersih
  • Keluar VS
  • rm -rf / obj / *
  • Panggil VS dan bangun kembali

1

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:

xmlns:util="clr-namespace:LiveSpielTool.Utils;assembly="

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.


0

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


0

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


0

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.


0

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.


Jawaban ini diberikan setidaknya dua kali di atas.
pdschuller

0

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.


0

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.


0

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


1
Saran Anda adalah perubahan signifikan yang bahkan mungkin tidak menjadi kemungkinan bagi OP jika mereka menargetkan lingkungan tertentu. Either way itu sangat tidak mungkin menjadi penyebab masalah, dan jika itu memecahkan masalah untuk Anda maka saya akan menyarankan bahwa masalah Anda yang sebenarnya adalah konfigurasi proyek yang tidak sesuai, yang akan memanifestasikan dirinya dalam berbagai cara untuk masalah yang ditampilkan di sini.
LordWilmore

0

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


0

Saya telah menambahkan assembly sebagai proyek - pertama menghapus ddl yang ditambahkan secara khusus ke referensi ke dll - yang melakukannya.


0

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.


0

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.