Namespace tidak dikenali (meskipun ada)

145

Saya mendapatkan kesalahan ini:

Tipe atau nama namespace 'AutoMapper' tidak dapat ditemukan (apakah Anda melewatkan direktif penggunaan atau referensi perakitan?)

Yang lucu adalah saya sudah memiliki referensi itu dalam proyek saya:

Kegagalan ProjectThat

Dan ini kode saya:

using System.Collections.Generic;
using DataContract;
using SelectorDAL;
using AutoMapper;

namespace SpecimenSelect
{
    public class SpecimenSelect : ISpecimenSelect
    {
        public SpecimenSelect()
        {
            SetupMaps();
        }

        private static void SetupMaps()
        {
            Mapper.CreateMap<SpecimenDetail, SpecimenDetailContract>();
        }

Hal aneh lainnya adalah saya memiliki dua proyek lain dalam solusi saya yang sama-sama menggunakan AutoMapper dan mereferensikan file AutoMapper.dll yang persis sama. Keduanya bekerja dengan sangat baik.

Berikut ini screenshotnya:

ProjectThatWorks

dan di sini adalah kode itu (yang mengkompilasi dengan baik):

using System.Collections.Generic;
using AutoMapper;
using DataContract;
using SelectorDAL;

namespace PatientSelect
{

    public class PatientSelect : IPatientSelect
    {
        public PatientSelect()
        {
            SetupMaps();
        }

        private void SetupMaps()
        {
            Mapper.CreateMap<Patient, PatientContract>();
            Mapper.CreateMap<OrderedTest, OrderedTestsContract>();
            Mapper.CreateMap<Gender, GenderContract>();
        }

Kedua referensi tersebut tampaknya memiliki data yang sama di halaman properti.

Apa yang saya lewatkan?

Saya mencoba:

  1. Mulai ulang Visual Studio
  2. Referensi tanpa menggunakan pernyataan (yaitu AutoMapper.Mapper.CreateMap)
  3. Bersihkan dan Bangun Kembali

Ada ide lain?

Gunung berapi
sumber
1
Apakah jalur referensi salah? Mungkin ditambahkan dengan jalur absolut, tetapi sejak itu DLL telah dipindahkan?
kevingessner

Jawaban:

259

Periksa untuk memastikan bahwa proyek Anda tidak diatur untuk menggunakan Profil Klien .NET Framework 4.

Anda dapat memeriksa / mengubahnya dengan mengklik kanan proyek Anda (bukan solusinya), pilih Properties -> Application -> Framework target . Kerangka target adalah dropdown pada halaman itu.

Ini adalah masalah dalam Visual Studio (saya bahkan akan menyebutnya bug). AutoMapper membutuhkan majelis yang dikecualikan dari Profil Klien .NET Framework 4. Karena proyek Anda menggunakan versi kerangka kerja itu rusak.

Kesalahan serupa akan menyebar ke proses pembuatan ketika versi .NET Framework untuk proyek yang Anda rujuk lebih tinggi daripada proyek yang membuat referensi. mis. Penargetan proyek 4.5 yang merujuk penargetan proyek 4.5.1 akan memberikan Anda kesalahan yang sama.

Harus ada pesan kesalahan yang lebih baik ketika ini terjadi karena tidak ada penjelasan rasional mengapa itu tidak akan membangun karena pesan kesalahan memberitahu Anda untuk referensi perakitan yang telah Anda rujuk dengan jelas.

Andrew Hare
sumber
7
Persis seperti itulah masalahnya! Terimakasih! Saya setuju bahwa kesalahan ini sangat menyesatkan. Saya juga tidak mengerti mengapa Profil Klien adalah default untuk proyek baru. Sebagian besar komputer akan memiliki .net framework penuh kan? (Atau apakah MS hanya meletakkan kerangka klien pada Pembaruan Windows?) Bagaimanapun, semua komputer yang saya kembangkan akan memiliki kerangka kerja penuh. Saya berharap ada cara untuk mengubah default untuk proyek baru sehingga tidak menggigit saya seperti ini. Bagaimanapun. Terima kasih lagi! Saya terjebak dan saya tidak berpikir untuk melihat ke sana.
Vaccano
Saya memiliki masalah yang persis sama! Jenis tidak dikenali dalam proyek layanan windows saya bahkan jika saya telah menambahkan referensi dengan benar. Saya mengubah kerangka target dari .NET Framework 4 Profil Klien ke .NET Framework 4. Perhatikan bahwa saya juga harus menambahkan kembali referensi saya untuk membuatnya dikompilasi. Tampaknya menjadi masalah di Visual Studio 2010. Terima kasih dan salam dari Budapest.
Varga Tamas
Bagus, ini juga terjadi pada saya. Proyek pengujian saya tidak mengenali ruang nama referensi meskipun mereka ada di sana. Ini karena saya mengubah perpustakaan saya ke platform .NET 4.5 tetapi proyek uji tetap sebagai 4.0. Bagaimanapun, jawaban Anda membawa saya ke jalur yang benar. Terima kasih, untuk mengetahui hal ini.
Jukka Puranen
Saya menghadapi masalah yang sama ketika saya mencoba menggunakan perakitan .Net 2.0 dalam proyek profil klien 3.5 Net. dan beralih ke 3,5 profil lengkap menyelesaikan masalah.
Palani
Masalah saya serupa. Proyek-proyek menggunakan versi Kerangka yang berbeda. Proyek utama menggunakan 4,5 dan proyek yang baru dibuat menggunakan 4.5.1. Akan lebih baik jika pesan kesalahan lebih baik.
L_7337
27

Izinkan saya mengajukan pertanyaan bodoh: Mungkinkah ada dua file automapper.dll ? Satu dengan AutoMappernamespace dan satu tanpa? Konfirmasikan jalur di kedua proyek.

Saya juga memperhatikan bahwa urutan usingperintahnya berbeda. Seharusnya tidak masalah, tetapi apakah Anda sudah mencoba mengocoknya?

n8wrl
sumber
18

Jika kelas Anda tidak dikompilasi, bahkan jika itu ada dalam proyek, periksa ini:

  1. apakah nama kelas sama persis
  2. apakah ruang nama sama persis
  3. apakah properti kelas menunjukkan build action = compile
Anonim
sumber
6
Saya menyalin file .cs dengan Explorer dan kemudian memasukkannya ke dalam proyek. VS.Net menetapkan tindakan pembangunan sebagai "Konten" alih-alih "Kompilasi" sehingga tidak mengenali namespace. Tangkapan yang bagus!
AUSteve
1
Saya menambahkan kelas melalui fitur Tambah -> Kelas, dan mengatur aksi build ke konten. Hanya ingin tahu mengapa? Ini membantu saya, sesuatu yang sangat sederhana, tetapi belum pernah ditemukan sebelumnya. Itulah sebabnya saya bahkan tidak repot-repot mencari di sana, dan mencari di Google saja.
Anomali
14

Ini harus menjadi solusi paling sederhana jika semua jawaban lain tidak membantu Anda

Saya mencari apa yang salah dengan pengaturan saya di antara jawaban, Mencoba semuanya - tidak ada yang berhasil, Kemudian saya menyadari Visual Studio 2018 dikembangkan oleh Microsoft . Jadi saya melakukan apa yang dilakukan kebanyakan orang,

Visual Studio Restarted Dan Berhasil

tidak bisa tidur
sumber
Bekerja untuk saya tetapi menghapus folder bin dan obj sebelum memulai kembali.
Chandan YS
Dalam semua tahun saya di stackoverflow, ini adalah respons asin terbaik untuk bug (yang sebenarnya menyediakan solusi) dan bekerja pada restart pertama. ft insomniac!
Collin White
12

Saya menyelesaikan masalah ini dengan mengklik kanan pada folder yang berisi file dan memilih Kecualikan Dari Proyek dan kemudian mengklik kanan lagi dan memilih Sertakan Dalam Proyek (Anda pertama-tama harus mengaktifkan Tampilkan Semua File untuk membuat folder yang dikecualikan terlihat)

pengguna3251328
sumber
Saya memiliki kesalahan ini untuk banyak file, hanya menghapus satu dan memasukkannya kembali menyelesaikan masalah untuk seluruh solusi.
Daryl
Mengklik kanan pada apa? "Kecualikan dari proyek" menghapus folder dari solusi explorer. Tidak ada "Termasuk dalam Proyek"
Florian Winter
2
@FlorianWinter Untuk mengklik kanan folder yang dikecualikan Anda harus memiliki Tampilkan Semua File . Ini dapat diaktifkan melalui Solution Explorer, ditemukan di sebelah tombol Tutup Semua .
user3251328
Tidak tahu mengapa, tetapi ini bekerja di VS2019 ketika saya menambahkan file baru yang berisi kelas baru ke proyek, tetapi tidak bisa membuat contoh baru dari kelas itu di proyek lain yang sudah memiliki referensi ke proyek yang mengandung kelas baru. ..¯\_(ツ)_/¯
matt.fc
7

Saya memiliki masalah yang serupa dengan referensi yang tidak dikenali di VS2010 dan jawaban di sini tidak dapat memperbaikinya.

Masalah dalam solusi saya terkait dengan perluasan jalur tempat proyek yang dirujuk berada. Ketika saya bekerja dengan SVN, saya membuat cabang repositori untuk melakukan beberapa pengujian dan cabang itu meningkatkan dua level dalam struktur path, sehingga path menjadi terlalu panjang untuk dapat digunakan di windows. Ini tidak menimbulkan kesalahan tetapi tidak mengenali namespace dari referensi proyek. Ketika saya memperbaiki lokasi proyek untuk memiliki jalan yang lebih kecil semuanya berjalan dengan baik.

onurb84
sumber
2
Ini adalah masalah bagi kami juga dan itu adalah panjang jalur yang menyebabkan masalah. VS perlu melakukan pekerjaan yang lebih baik dalam memberikan kesalahan yang lebih baik dalam kasus itu karena kesalahan yang kami dapatkan cukup menyesatkan.
VoodooChild
Terima kasih atas jawaban Anda, sebuah ide muncul di benak saya. Saya melihat jalan proyek saya dan menyadari bahwa folder root, yang dibuat oleh source tree, memiliki "% 20" alih-alih _ dalam nama. Saya mengubahnya menjadi _ dan semuanya berfungsi dengan baik sekarang.
Fernando Wolff
5

Dalam kasus saya, dll yang direferensikan dibangun dalam versi yang lebih tinggi .Net Framework. Setelah saya menambahkan referensi, saya bisa menggunakannya. Tetapi segera setelah saya membangun, kesalahan 'referensi hilang' akan muncul. Saya menyegarkan dll kesalahan akan pergi tetapi tidak akan pernah membangun. Posting ini membuat saya memeriksa versi kerangka kerja dan dengan demikian saya dapat menyelesaikannya dengan membangun proyek yang direferensikan dalam versi yang sama.

Ankur-m
sumber
3

Mungkin tabel jenis proyek dalam kondisi yang salah. Saya akan mencoba untuk menghapus / menambahkan referensi dan jika itu tidak berhasil, buat proyek lain, impor kode saya, dan lihat apakah itu berhasil.

Saya mengalami ini saat menggunakan VS 2005, orang akan mengharapkan MS untuk memperbaiki masalah tertentu sekarang ..

dave
sumber
Bisakah Anda memperbaiki masalah ini?
Fran_gg7
3

Pertanyaannya telah diberikan, tetapi ada detail tambahan yang belum diuraikan yang perlu diperiksa.

Saya juga memiliki perilaku ini, di mana proyek B direferensikan dalam proyek A, tetapi namespace proyek B tidak diakui dalam proyek A. Setelah beberapa penggalian, saya menemukan jalan saya terlalu panjang. Dengan mengurangi jalur proyek (baik A dan B) referensi menjadi terlihat dan tersedia.

Saya menguji teori ini dengan membuat proyek C pada kedalaman jalur yang jauh lebih rendah. Saya mereferensikan proyek C di proyek A. Referensi bekerja dengan benar seperti yang diharapkan. Saya kemudian menghapus proyek C dari solusi, hanya memindahkan proyek C ke jalur yang dalam, sama dengan proyek B, dan menambahkan proyek C kembali ke solusi, dan mencoba mengkompilasi. Saya kemudian tidak memiliki visibilitas untuk memproyeksikan objek C lagi.

barrypicker
sumber
2

Dalam kasus saya, saya telah menyalin perpustakaan kelas, dan tidak mengubah "Nama Majelis" di properti proyek, jadi satu DLL menimpa yang lain ...

Fernando Meneses Gomes
sumber
2

Ini terjadi pada saya di Visual Studio 2019. Bagi saya, saya mencoba untuk referensi proyek lain dalam solusi saya. Berikut langkah-langkah yang saya ambil seandainya itu membantu orang lain:

  1. Memastikan proyek yang ingin saya rujuk terdaftar di bawah Referensi
  2. Memastikan kedua proyek menggunakan versi .NET Framework yang benar
  3. Membangun proyek (panah "Mulai" hijau diklik)

Saya bingung karena saya masih mendapatkan kesalahan setelah langkah 1 dan 2, tetapi membangun proyek sepertinya menyelesaikannya.

mtfalcon31
sumber
1

Saya menghadapi masalah yang sama dengan namespace / metode yang tidak ditemukan selama eksekusi meskipun baik-baik saja selama kompilasi, dan alasan untuk ini tampaknya karena rakitan yang saya rujuk digunakan untuk GAC dan sejak itu diubah, jadi ketika saya mereferensikan rakitan dalam Visual Studion itu menggunakan yang terbaru, tetapi selama runtime versi dari GAC telah digunakan.

Pavel Tsybulivskyi
sumber
1

Dalam kasus saya, saya mendapatkan kesalahan hanya di VS 2015. Ketika membuka proyek di VS 2017 kesalahan itu hilang.

daniel
sumber
1

Gila. Aku tahu.

Sudah mencoba semua opsi di sini. Mulai ulang, bersihkan, periksa secara manual di DLL yang dihasilkan (ini sangat berharga untuk dipahami jika sebenarnya Anda sendiri yang mengacaukannya).

Saya mulai bekerja dengan mengatur Verbosity dari MSBuild ke "Detail" di Options.

Program.X
sumber
bagi saya itu adalah konfigurasi build yang disetel ke AnyCpu di PlatformTarget ketika Nama Konfigurasi x86. Pengaturan ini membantu saya menemukannya.
Dbl
1

Pertanyaan ini sudah dijawab untuk poster aslinya, tetapi jika seseorang menemukan ini dalam proyek MS-Test:

dari dalam Visual Studio, klik menu Uji -> Pengaturan Tes -> Arsitektur Prosesor Default dan pastikan bahwa arsitektur cocok dengan yang dari rakitan lain yang Anda rujuk. Jika unit lain x64 dan pengaturan tes Anda x86, Anda mungkin mengalami gejala yang dimiliki oleh poster asli.

S. Hooley
sumber
0

Saya sedang mengerjakan proyek Xamarin dan seperti biasa, menghapus folder obj dan membangun kembali menyelesaikan masalah saya, namespace VS saya tidak mengenali adalah kode dalam proyek saya sendiri BTW

mohas
sumber
0

Dalam kasus saya menghapus / menambahkan perakitan yang berfungsi.

sheikh sabeer
sumber
0

Saya pernah mengalami masalah serupa, yang butuh sedikit untuk memecahkan masalah, jadi saya pikir untuk membagikannya:

Namespace yang tidak dapat diselesaikan dalam kasus saya adalah Company.Project.Common.Models.EF . Saya telah menambahkan file di namespace Company.Project.BusinessLogic.Common baru .

Sebagian besar file memiliki

using Company.Project;

Dan kemudian merujuk model sebagai Common.Models.EF . Semua file itu juga punya

using Company.Project.BusinessLogic;

Gagal karena VS tidak dapat menentukan namespace yang akan digunakan.

Solusinya adalah mengubah namespace kedua menjadi Company.Project.BusinessLogic.CommonServices

MaPi
sumber
-1

Restart Visual Studio 2019 - itu berhasil.

Jeff Woehler
sumber
Vaccano menulis: Saya mencoba: Restarting Visual Studio
Woworks