Mengapa saya tidak bisa mereferensikan perpustakaan kelas saya?

86

Saya memiliki solusi yang berisi situs web dan perpustakaan kelas di Visual Studio 2008.

Saya kemudian memiliki proyek situs web lain di luar solusi yang perlu merujuk perpustakaan kelas. Saya klik kanan folder Bin atau Proyek dan pilih Tambahkan Referensi, lalu pilih Proyek Perpustakaan Kelas saya, ia menambahkan 15 atau lebih DLL yang diperlukan perpustakaan kelas ke folder bin situs web, tetapi tidak ada file .cs yang mengenali pernyataan penggunaan.

using MyLibrary.MyFolder;

Ia mengatakan bahwa itu tidak dapat menyelesaikannya, dan ReSharper hanya mengatakan itu dapat dihapus dengan aman karena tidak digunakan.

ReSharper dapat mengenali bahwa ia membutuhkan referensi dan menyarankan bahwa ia "Referensi MyLibrary dan gunakan MyFolder". Saya tidak yakin mengapa ini menyarankan saya menambahkan referensi yang sudah saya miliki. Ketika saya mengikuti saran, saya mendapatkan kesalahan

"Gagal mereferensikan modul. Mungkin, referensi akan menghasilkan dependensi melingkar di antara project."

Saya telah mencoba membuka halaman properti situs web dan menghapus semua referensi dan menambahkannya kembali, tetapi memberikan kesalahan yang sama. Ada ide mengapa ini tidak berhasil?

Brandon
sumber
Periksa versi .net framework di perpustakaan kelas dan proyek yang Anda referensikan
Manideep Innamuri

Jawaban:

164

Selain itu, periksa apakah proyek solusi baru dijalankan dengan kerangka kerja yang kompatibel dengan proyek yang Anda coba sertakan. Saya mencoba memasukkan referensi ke proyek 4.0 dalam proyek 3.5.

CindyH
sumber
3
Pujian! Saya sedang membangun solusi saya sebagai 4.5 dan menghubungkannya ke 4.0. Karena persyaratan 4.0 kami saat ini, saya menurunkan versi solusi baru menjadi 4.0 dan sekarang proyek saya yang lain tidak memiliki masalah dalam membangunnya. 1 untuk membantu saya tetap waras!
David Peterson
1
Saya telah mengatasi begitu banyak kendala sebelumnya dengan proyek ini, hampir menyerah ketika saya mendapat kesalahan ini. Anda menyimpannya, terima kasih!
Tony D
1
Tidak menyangka dengan cara ini masalah akan terpecahkan! Enuf keren
Irfan
1
Kemudian Microsoft harus mengatakan ini dan menyertakan opsi untuk menempatkan semuanya pada versi yang sama.
PRMan
1
Menyelamatkan hariku! VisualStudio bahkan tidak meningkatkan peringatan yang mengingatkan saya tentang itu :(
Reuel Ribeiro
86

Saya menemukan cara untuk memperbaiki masalah ini (setidaknya bagi saya). Mengapa berhasil, saya tidak yakin, tetapi berhasil. (Saya baru saja mencoba melawan situs web kedua yang mengalami masalah yang sama dan solusi berikut juga berfungsi untuk itu).

Saya mencoba pembersihan normal proyek dan membangun kembali, mematikan semua contoh Visual Studio saya dan memulai ulang, bahkan mencoba memulai ulang komputer saya.

Apa yang benar-benar berhasil adalah membuka proyek di Visual Studio, menutup semua tab yang terbuka, dan kemudian mematikannya.

Sebelumnya saya membiarkan tab terbuka karena menurut saya itu tidak penting (dan saya hampir tidak pernah menutup tab yang saya gunakan).

Brandon
sumber
Cukup restart VS berhasil untuk saya. Penyebab masalah itu adalah Project / Namespace yang mengubah nama refactoring memicu bug di R #.
mbx
Itu berhasil juga untuk saya. Saya menutup semua tab seperti yang Anda katakan dan kemudian memulai ulang IDE dan voila saya, saya dapat mereferensikan perpustakaan kelas saya sekarang. Terima kasih.
yuva
31

Satu kemungkinan adalah bahwa versi target .NETFramework perpustakaan kelas lebih tinggi daripada proyek.

pengguna4847434
sumber
8

Saya memiliki masalah yang sama, apakah semua referensi saya akan diganggu oleh Resharper - Solusi yang berhasil untuk saya adalah menghapus Cache Resharper dan kemudian memulai ulang VS

alat-> opsi-> resharper-> opsi-> umum-> klik tombol hapus cache dan mulai ulang VS

Rocky
sumber
4

Saya memiliki masalah serupa di mana VS terkadang membangun dan terkadang tidak. Setelah beberapa pencarian dan upaya, saya menemukan bahwa saya memiliki referensi ambigu ke kelas dengan nama yang sama di perpustakaan yang berbeda ('FileManager'). Proyek yang tidak akan dibangun adalah Tes Unit saya yang mereferensikan semua modul dalam solusi saya. Menerapkan referensi ke modul tertentu menyelesaikan masalah untuk saya.

Maksud saya adalah: Daripada menyalahkan ReSharper atau VS, mungkin ada baiknya untuk memeriksa ulang apakah memang tidak ada semacam referensi melingkar. Lebih dari sering, kelas dengan nama yang sama dalam modul yang berbeda dapat menyebabkan kebingungan dan seringkali merupakan gejala desain yang buruk (seperti dalam kasus saya).

Fedor Alexander Steeman
sumber
+1 dalam kasus saya, dua proyek dengan ruang nama yang berbeda dikompilasi menjadi .exe dengan nama yang sama (Nama rakitan di tab Aplikasi di Visual Studio) - karena proyek migrasi, ini (beberapa) masuk akal; Msbuild dari baris perintah memberi kami satu petunjuk tidak sangat membantu yang meninggalkan kami bertanya-tanya untuk sementara: The type or namespace name 'A' does not exist in the namespace 'B'. Perhatikan bahwa tidak ada peringatan yang muncul untuk ini ...
Jonno
3

Ini terdengar seperti masalah yang mirip dengan ReSharper:

http://www.jetbrains.net/devnet/thread/275827

Menurut salah satu pengguna di utas yang memaksa build memperbaiki masalah (CTRL + Shift + B) setelah build pertama ..

Kedengarannya seperti masalah dengan ReSharper khususnya dalam kasus mereka .. Sudahkah Anda mencoba membangun terlepas dari peringatan dan kemungkinan kesalahan palsu?

KP.
sumber
Saya menemukan itu sebelumnya. Dan saya tidak yakin apakah membangunnya "memperbaiki" masalahnya. Itu mengkompilasi, tetapi masih menunjukkan kelas, menggunakan pernyataan, kelas, dll. Sebagai tidak dikenali. Namun, jika saya sengaja memutuskan beberapa panggilan metode, Visual Studio tampaknya mengenali kesalahan, bahkan jika itu tidak menampilkan daftar parameter. Saya kira itu adalah kesalahan ReSharpers.
Brandon
3

Karena keduanya berada dalam solusi yang sama, alih-alih menambahkan referensi ke DLL, tambahkan referensi ke proyek perpustakaan kelas itu sendiri (dialog Tambahkan Referensi akan memiliki tab untuk ini).

Ahh, ini solusi yang berbeda. Merindukan itu. Bagaimana kalau Anda mencoba daripada menambahkan referensi ke proyek menambahkan referensi ke DLL terkompilasi perpustakaan kelas Anda. Dialog Add Reference memiliki tab Browse yang melakukan ini.

Vilx-
sumber
1
Ini berfungsi untuk saya, solusi lain menyarankan untuk menambahkan referensi tetapi untuk beberapa alasan saya tidak menemukannya sampai saya mengklik kanan proyek utama di penjelajah solusi.
Ralpharama
3

Setelah mengonfirmasi, versi asp.net yang sama digunakan. Saya menghapus proyek. membersihkan solusinya dan menambahkan kembali proyek. inilah yang berhasil untuk saya.

David
sumber
Saya memiliki masalah yang sama dan ini sepertinya membantu. Sangat aneh.
inexcitus
2

Jika Anda mereferensikan rakitan untuk proyek yang berada dalam solusi yang sama, tambahkan referensi Proyek (menggunakan tab "Proyek") daripada menelusuri dll di folder \ bin \ Debug (atau \ bin \ Release) (menggunakan Tab "Jelajahi"). Lihat tangkapan layar di bawah. Hanya telusuri file assembly / dll jika dianggap sebagai assembly eksternal.

masukkan deskripsi gambar di sini

MacGyver
sumber
2

Saya menghapus * .csproj.user (file resharper) dari proyek saya, kemudian, tutup semua tab dan buka kembali. Setelah itu saya dapat mengkompilasi proyek saya dan tidak ada peringatan resharper.

Alex
sumber
Saya melakukan ini dan mendapatkan kecerdasan saya yang menunjukkan informasi perakitan lagi, tetapi segera setelah saya mencoba untuk mengkompilasi ulang, informasi kecerdasan saya untuk perakitan itu dihapus dan pembuatan gagal. Ini adalah satu kesalahan yang aneh!
David Peterson
Saya juga harus membuat ulang proyek saya dari awal ... saya pikir saya melakukan beberapa untuk banyak uninstall / install di NuGet pada proyek yang relatif baru.
Adam Nofsinger
Menghapus dan membuat ulang referensi berhasil untuk saya, penghapusan file proyek secara penuh mungkin berlebihan.
danjuggler
2

Saya punya masalah ini. Aku butuh waktu lama untuk mengetahuinya. Saya memiliki orang-orang di bahu saya untuk membantu. Kami membangun kembali, membersihkan dan memulai kembali Visual studio dan ini tidak memperbaikinya. Kami menghapus dan menambahkan kembali referensi ...

Semua sia-sia .... Sampai!

Solusi untuk masalah saya adalah bahwa deklarasi kelas saya dieja dengan tidak benar.

Sebelum Anda mulai menghakimi saya dengan kasar, izinkan saya menjelaskan mengapa itu tidak bodoh, dan juga mengapa kesalahan ini dapat dilakukan bahkan oleh programmer paling cerdas sekalipun.

Karena kesalahan terjadi di awal nama, kesalahan itu tidak muncul di daftar kelas Intellisense ketika saya mulai mengetik.

misalnya

Nama kelas: Message.cs

Pernyataan:

public class Massage
{
    //code here

}

Sekilas dan dalam font kecil, Pijat terlihat identik dengan Message.

Mengetik M mencantumkan terlalu banyak kelas, jadi saya mengetik e, yang tidak muncul dalam versi yang salah ketik, yang memberi kesan bahwa kelas tersebut tidak diambil oleh kompilator.

WonderWorker
sumber
Jadi pada dasarnya Anda salah ketik. Itu tidak terlalu berguna bagi orang lain.
TylerH
0

Saya memiliki masalah serupa di VS 2010, saat membuat proyek uji untuk aplikasi MVC 2. Gejala-gejalanya identik.

Pesan dari ReSharper agak menyesatkan. Untuk sesaat saya sepenuhnya mengabaikan ReSharper dan melakukannya dengan "cara VS manual":

  1. Saya membersihkan solusinya.
  2. Saya secara manual menambahkan referensi ke proyek MVC.
  3. Saya menambahkan arahan menggunakan secara manual.
  4. ctrl-shift-b

Pada tahap ini saya mendapat kesalahan kompilasi: Saya seharusnya mereferensikan System.Web.Mvcperakitan dalam proyek pengujian saya (menghela napas). Menambahkan referensi ini menyebabkan proyek dikompilasi. Masalah ReSharper tetap ada, tetapi runner pengujian ReSharper berfungsi.

Saat saya memulai ulang VS, kesalahan ReSharper juga hilang. Saya tidak yakin apakah perlu memulai ulang - cukup menutup file .cs mungkin sudah cukup.

Mulai sekarang, saat saya melihat pesan ReSharper

Gagal mereferensikan modul. Mungkin, referensi akan menghasilkan ketergantungan melingkar antar proyek.

Saya akan membaca

Gagal mereferensikan modul. Mungkin, referensi akan menghasilkan dependensi melingkar antar project, atau Anda kehilangan beberapa referensi ke dependensi referensi tersebut.

Marijn
sumber
0

Perbaikan lain yang mungkin berhasil untuk saya:

Jika Anda memiliki Assembly A, yang mereferensikan Assembly B, yang keduanya mereferensikan assembly X non-proyek (eksternal), dan kode Assembly B tidak akan mengenali bahwa Anda telah mereferensikan X, maka coba langkah-langkah berikut secara berurutan:

  • Jatuhkan referensi ke X dari KEDUA A dan B.
  • Buat kembali referensi ke X di B
  • Buat kembali referensi ke X di A

Rupanya, VS tidak akan mengenali referensi ke rakitan eksternal dalam proyek yang merupakan ketergantungan proyek lain yang sudah merujuk ke eksternal. Dengan menyiapkan referensi lagi dari awal, Anda mengatasi hal ini. Ini sangat aneh.

KeithS
sumber
Menarik tapi benar di VS2015. Terima kasih!
Scott Nimrod
0

Saya menghadapi masalah ini, dan saya menyelesaikannya dengan menutup studio visual, membuka kembali studio visual, membersihkan dan membangun kembali solusinya. Ini berhasil untuk saya.

Muhammad Sohail
sumber
0

Jika menggunakan TFS, melakukan Get latest (rekursif) tidak selalu berfungsi. Sebagai gantinya, saya memaksa mendapatkan yang terbaru dengan mengklik Kontrol sumber => Dapatkan versi tertentu lalu mengklik kedua kotak. Ini cenderung berhasil.

masukkan deskripsi gambar di sini

Jika masih tidak berhasil maka menghapus file suo (biasanya ditemukan di tempat yang sama dengan solusi) memaksa visual studio untuk mendapatkan semua file dari sumber (dan kemudian membangun kembali file suo).

Jika tidak berhasil, coba tutup semua file Anda yang terbuka dan tutup Visual studio. Ketika Anda membuka studio Visual berikutnya, itu harus diperbaiki. Ada bug pencatat yang diselesaikan dengan cara ini.

WonderWorker
sumber
0

Saya telah menemukan masalah serupa baru-baru ini. Saya bekerja di Visual Studio 2015 dengan Resharper Ultimate 2016.1.2. Saya mencoba menambahkan kelas baru ke basis kode saya saat mencoba merujuk kelas dari rakitan lain tetapi Resharper akan memberikan kesalahan untuk paket itu.

Dengan bantuan rekan kerja, saya menemukan bahwa kelas yang direferensikan ada di namespace global dan tidak dapat diakses dari kelas baru karena disembunyikan oleh entitas lain dengan nama yang sama yang ada di namespace saat ini.

Menambahkan kata kunci 'global ::' sebelum namespace yang diperlukan membantu saya mereferensikan kelas yang sebenarnya saya cari. Rincian lebih lanjut tentang ini dapat ditemukan di halaman yang tercantum di bawah ini:

https://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx

lumena
sumber
0

Jika kedua proyek terdapat dalam solusi yang sama, akan lebih tepat jika Anda menambahkan referensi untuk proyek yang Anda butuhkan, bukan dll yang dikompilasi.

masukkan deskripsi gambar di sini

Manuel Roldan
sumber
-1

Sayangnya, satu-satunya hal yang berhasil untuk saya adalah sepenuhnya menghapus dan membuat ulang proyek perpustakaan kelas, setelah menyalin sementara file kelas di dalamnya di tempat lain. Hanya dengan demikian proyek web ASP.Net akan mengenali usingpernyataan yang merujuk ke proyek perpustakaan kelas. Ini dengan Visual Studio 2010, tidak menggunakan ReSharper.

snark
sumber
-1

Saya memiliki masalah serupa. Apa yang berhasil bagi saya adalah saya telah menambahkan Perpustakaan Kelas yang salah dari studio visual . Saya menambahkan dengan menggunakan fitur pencarian studio visual.

Yang perlu saya lakukan adalah Add New Project> Visual C #> Class Library . Dan pustaka kelas yang baru ditambahkan ini adalah yang benar dan sekarang dapat ditambahkan sebagai referensi untuk proyek apa pun.

Muhammad Rehan Qadri
sumber
-4

Anda mungkin lupa menambahkan referensi perpustakaan kelas yang perlu Anda impor.

Klik kanan perpustakaan kelas yang ingin Anda impor (yang berisi beberapa perpustakaan kelas yang diimpor), -> Tambah-> Referensi (Pilih Proyek-> Solusi-> pilih perpustakaan kelas yang ingin Anda impor dari-> OK)

Kyle
sumber