Saya mencoba untuk membuat tampilan yang sangat diketik berdasarkan kelas dari rakitan lain. Untuk alasan apa pun, tampilan Razor saya tampaknya tidak memiliki visibilitas rakitan lain yang dirujuk pada proyek saya. misalnya
@model MyClasses.MyModel
menghasilkan kesalahan dalam Visual Studio 2010, "Jenis atau nama namespace MyClasses
tidak dapat ditemukan (apakah Anda kehilangan petunjuk penggunaan atau rakitan referensi?)."
Kelas yang sama yang direferensikan dalam mesin tampilan standar berfungsi dengan baik. Saya mengalami masalah yang sama saat mencoba merujuk kelas dalam tubuh pandangan saya.
Apakah saya melewatkan sesuatu tentang Razor atau apakah saya perlu merujuk perakitan dengan cara lain?
asp.net-mvc
asp.net-mvc-3
razor
Nickwesselman
sumber
sumber
Jawaban:
Ada bagian konfigurasi baru yang digunakan untuk mereferensikan ruang nama untuk tampilan Razor.
Buka
web.config
file diViews
folder Anda , dan pastikan file tersebut memiliki yang berikut:Alternatifnya, Anda dapat menambahkan menggunakan pernyataan ke tata letak bersama Anda:
Setelah mengedit Web.config, mulai ulang Visual Studio untuk menerapkan perubahan.
sumber
Copy Local = true
. Rakitan eksternal mungkin tidak berfungsi sebaliknya.Saya memiliki masalah yang sama: MVC3 Project MyCore.Web merujuk ke namespace MyCore.DBLayer dari proyek lain dalam solusi yang sama (dengan nama assembly MyCoreDBLayer). Semua objek dari MyCore.DBLayer bekerja dengan sempurna di Pengontrol dan Model tetapi gagal di tampilan Razor dengan kesalahan 'Jenis atau nama namespace' DBLayer 'tidak ada di namespace' MyCore '(apakah Anda kehilangan referensi perakitan?)' Yang sebelumnya jelas tidak demikian.
Menambahkan referensi assembly ke bagian system.web / kompilasi / assemblies dari file web.config root memperbaiki masalah. Bagian tersebut sekarang terlihat seperti:
Menghilangkan versi, budaya, token baik-baik saja untuk saat ini, tetapi harus diperbaiki di masa mendatang.
sumber
Views/web.config
dan berhasil ketika ditempatkan di sana juga.Dalam kasus saya, proyek terpisah yang berisi namespace adalah Aplikasi Konsol. Mengubahnya ke Perpustakaan Kelas memperbaiki masalah.
sumber
Tak satu pun di atas berhasil untuk saya;
Tetapi saya akhirnya menemukan sesuatu yang berhasil untuk saya:
Itu karena saya memiliki Build Output saya menuju bin \ Debug \ untuk konfigurasi Debug dan bin \ Release \ untuk konfigurasi Rilis. Segera setelah saya mengubah Konfigurasi Build menjadi "bin \" untuk Semua konfigurasi (seperti gambar di bawah) maka semuanya mulai bekerja sebagaimana mestinya !!!
Saya tidak tahu mengapa memisahkan build Anda ke dalam folder Release dan Debug harus menyebabkan sintaks Razor rusak, tetapi tampaknya itu karena sesuatu tidak dapat menemukan rakitan. Bagi saya, proyek yang mengalami masalah sintaksis pisau cukur sebenarnya adalah proyek 'perpustakaan pisau cukur' saya. Mereka ditetapkan sebagai Proyek Aplikasi namun saya menggunakannya sebagai perpustakaan kelas dengan RazorGenerator untuk mengkompilasi pandangan saya. Ketika saya benar-benar mencoba menjalankan salah satu proyek ini secara langsung, itu menyebabkan kesalahan Konfigurasi berikut:
Hal ini mengarahkan saya untuk mencoba mengubah Output Build, karena saya perhatikan bahwa untuk semua proyek web, Output Build tampaknya selalu langsung ke folder bin, tidak seperti default untuk perpustakaan kelas, yang memiliki folder rilis dan debug.
sumber
Anda sepertinya mencari jawaban ini: https://stackoverflow.com/a/4136773/176877
Artinya, buka dalam Views \ Web.Config (BUKAN root), dan tambahkan namespace di bawah tag Halaman:
Simpan itu, lalu tutup dan buka kembali file Razor.
Jika Anda menggunakan Area, Anda harus melakukan ini untuk setiap Web.Config di setiap Area.
Visual Studio telah menjadi buggier selama bertahun-tahun sehingga mungkin memerlukan penutupan berkas Razor yang menjalankan pembuatan Debug kemudian membuka kembali berkas Razor, atau mungkin yang terburuk memerlukan restart Visual Studio. Tetapi pada akhirnya ini akan menampilkan file Razor kepada Anda seolah-olah semua yang ada di daftar namespaces itu ada di pernyataan @using di bagian atas semua Tampilan Anda.
sumber
Dalam ASP.NET Core MVC , solusinya adalah menambahkan
using
di _ViewImports.cshtml, alih-alih meletakkannya di web.config di folder View saat bekerja dengan ASP.NET MVC 5._ViewImports.cshtml
Melihat
sumber
Bagi saya, saya mereferensikan proyek yang merupakan aplikasi konsol. Itu ditetapkan untuk membangun sebagai exe (aplikasi konsol) dan bukan perpustakaan kelas (DLL). Ketika saya mengubah ini, saya dapat melihat model dari proyek terpisah itu tidak ada masalah.
sumber
Saya mendapatkan kesalahan yang sama saat mencoba menggunakan objek Smo dalam tampilan Razor. Tampaknya ini karena Razor tidak dapat menemukan DLL yang dirujuk dalam proyek tersebut. Saya menyelesaikan ini dengan mengatur "Salin Lokal" ke true untuk semua dll Smo, namun mungkin ada solusi yang lebih baik (lihat tautan Czechdude di atas) @using dan web.config suntingan tidak berguna karena mereka hanya diperlukan jika Anda ingin menghilangkan namespace bagian dari nama jenis (misalnya Server, bukan Microsoft.SqlServer.Management.Smo.Server)
sumber
Saya mendapatkan kesalahan serupa setelah memindahkan mesin dev saya dari Win7 32bit ke Win7 64bit. Pesan eror:
...\Web\Views\Login.cshtml: ASP.net runtime error: [A]System.Web.WebPages.Razor.Configuration.HostSection cannot be cast to [B]System.Web.WebPages.Razor.Configuration.HostSection. Type A originates from System.Web.WebPages.Razor, Version=1.0.0.0 ... Type B originates from ... Version=2.0.0.0
Ternyata saya memiliki kedua versi di GAC. View
web.config
mereferensikan v1 tetapi aplikasi mereferensikan v2. Menghapus majelis yang direferensikan dan menambahkan kembali v1. dariSystem.Web.WebPages.Razor
, dll.sumber
baik, bagi saya itu berbeda. Saya melewatkan perakitan proyek aplikasi konsol saya dengan proyek MVC. Jadi, menambah referensi saja tidak cukup.
nah ini mungkin bisa membantu orang lain. pergi ke root file web.config
system.web
->compilation
-> tambahkan referensi proyek Anda seperti ini.<assemblies> <add assembly="Your.Namespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> </assemblies>
sumber
Saya juga memiliki masalah yang sama, tetapi masalahnya ada pada kerangka Target perakitan .
Rakitan yang direferensikan berada di .NET Framework 4.6 di mana proyek telah diatur ke .NET framework 4.5.
Semoga ini akan membantu seseorang yang mengacaukan kerangka kerja.
sumber
Nama Project FOLDER Anda harus sama. Jika nama Proyek atau Solusi Anda berbeda, MVC akan merugikan Anda.
Contoh: Jika Anda membuat Aplikasi baru dan mendapat nama default Webapplicaiton1, namespace ini akan dibuat. Jadi, katakanlah Anda tidak ingin memiliki namespace ini, jadi dari VS Anda mengubah di mana pun Anda dapat melihat "MyNamespace". Anda juga mencari dan mengganti semua kode dari "Webapplication1" dan menggantinya dengan "MyNamespace". Ini juga mengubah file web.config, sehingga menjadi
Sekarang semuanya akan bekerja, kecuali tampilan Razor.
RazorViews tidak dapat menemukannya, karena ada semacam ketergantungan yang aneh pada FOLDERNAME proyek. Ini desain yang buruk.
Saya telah menguji ini semi-menyeluruh dengan menyalin file saya ke solusi baru, dan satu-satunya perbedaan adalah nama folder.
sumber
Coba tambahkan namespace Anda
MyClasses
ke web.config di bawah<pages> <namespaces></namespaces> </pages>
sumber
sertakan seluruh namespace
sumber
Tidak satu pun dari https://stackoverflow.com/a/7597360/808128 ini yang berfungsi untuk saya. Bahkan "menambahkan referensi assembly ke bagian system.web / kompilasi / assemblies dari file web.config root". Jadi dua cara tetap bagi saya: 1) untuk menambahkan kelas bungkus publik untuk assembly saya yang dapat diakses kode Razor ke assembly ini melalui bungkus ini; 2) cukup tambahkan logika rakitan ke kelas publik di rakitan yang sama tempat kode Razor berada.
sumber
Selain membuat perubahan web.config untuk
<assemblies>
dan<namespaces>
, saya menemukan bahwa GAC membuat perbedaan besar. Anda dapat menerapkan budaya dan token kunci publik seperti rakitan inti .NET apa pun yang terdaftar secara global.Beberapa orang mungkin merasa ngeri saat menyebut GAC. Tetapi sebagai pengembang BizTalk, saya telah berkembang untuk menerimanya.
sumber
Solusi ini berhasil untuk saya (Lucu, tapi berhasil)
Saya mengedit halaman tampilan dan menyalin isinya dan menempelkannya, saya tidak mengubah konten tampilan apa pun, tetapi hanya mengedit sehingga studio visual dapat melakukan hal itu untuk melacak halaman, dan setelah itu semuanya mulai berfungsi
Solusi - Cukup edit halaman dan ganti dengan halaman yang sama (Bekerja untuk saya)
sumber
dalam model spacename, yourClassModel, tambahkan public sebelum name class
sumber
Dalam kasus saya, paket yang saya coba gunakan merujuk ke .net standard 2.1 sementara proyek perpustakaan kelas pisau cukur saya disetel ke 2.0
sumber