Ad alanı tanınmadı (orada olmasına rağmen)


151

Bu hatayı alıyorum:

'AutoMapper' tür veya ad alanı adı bulunamadı (kullanma yönergesi veya bir derleme başvurusu eksik mi?)

İşin garibi, projemde zaten bu referansa sahibim:

ProjectThatFails

Ve bu benim kodum:

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>();
        }

Diğer garip bir şey de, çözümümde hem AutoMapper kullanan hem de aynı AutoMapper.dll dosyasını referans alan iki projem daha var. İkisi de gayet iyi çalışıyor.

İşte birinin ekran görüntüsü:

ProjectThatWorks

ve işte o kod (iyi derleyen):

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>();
        }

Özellikler sayfasında her iki referans da aynı verilere sahip görünüyor.

Neyi kaçırıyorum?

Denedim:

  1. Visual Studio'yu Yeniden Başlatma
  2. Kullanarak ifade (ie AutoMapper.Mapper.CreateMap) olmadan başvurma
  3. Temizle ve Yeniden Oluştur

Başka fikir var mı?


1
Referans yolu yanlış mı? Belki mutlak bir yolla eklenmiştir, ancak DLL o zamandan beri taşındı?
kevingessner

Yanıtlar:


262

Projenizin .NET Framework 4 İstemci Profili'ni kullanacak şekilde ayarlanmadığından emin olun.

Bunu projenize sağ tıklayarak (çözüme değil) kontrol edebilir / değiştirebilirsiniz, Özellikler -> Uygulama -> Hedef çerçeve seçimini yapın . Hedef çerçeve, bu sayfadaki bir açılır listedir.

Bu, Visual Studio'da bir sorundur (hatta buna hata diyecek kadar ileri gidebilirim). Otomatik Eşleyici, .NET Framework 4 İstemci Profilinin dışında bırakılan derlemeler gerektirir. Projeniz çerçevenin bu sürümünü kullandığı için bozulur.

Referans yaptığınız projenin .NET Framework sürümü referansı yapan projeden daha yüksek olduğunda benzer bir hata derleme sürecine yayılır. Örneğin, 4.5.1'i hedefleyen bir projeye atıfta bulunan 4.5'i hedefleyen bir proje size aynı hatayı verecektir.

Bu olduğunda daha iyi bir hata mesajı olması gerekir, çünkü hata mesajı size açıkça başvurduğunuz bir derlemeye başvurmanızı söylediği için neden oluşmayacağına dair mantıklı bir açıklama yoktur.


7
Sorun tam olarak buydu! Teşekkürler! Bu hatanın çok yanıltıcı olduğuna katılıyorum. Ayrıca, Müşteri Profilinin yeni bir proje için neden varsayılan olduğunu da anlamıyorum. Çoğu bilgisayar tam .net çerçevesine sahip olacak değil mi? (Veya MS istemci çerçevesini Windows Update'e mi koyuyor?) Her neyse, geliştirdiğim tüm bilgisayarlar tam çerçeveye sahip olacak. Keşke yeni bir proje için varsayılanı değiştirmenin bir yolu olsaydı, bu yüzden beni böyle ısırır. Her neyse. Tekrar teşekkürler! Sıkıştım ve oraya bakmayı düşünmedim.
Vaccano

Ben tam olarak aynı problem vardı! Referansları doğru eklesem bile türler Windows hizmet projemde tanınmıyordu. Hedef çerçeveyi .NET Framework 4 İstemci Profili'nden .NET Framework 4'e değiştirdim. Ayrıca, derlemek için referanslarımı yeniden eklemem gerektiğini unutmayın. Visual Studio 2010'da bir sorun gibi görünüyor. Teşekkürler ve Budapeşte'den selamlar.
Varga Tamas

İyi bir, bu bana da oldu. Test projem, orada olsalar bile başvurulan ad alanlarını tanımadı. Bunun nedeni kütüphanemi .NET 4.5 platformuna değiştirmiş olmam ama test projesinin 4.0 olarak kalmasıydı. Her durumda, cevabınız beni doğru yolda yönlendiriyor. Bunu çözdüğün için teşekkürler.
Jukka Puranen

.Net 3.5 istemci profili projesinde .Net 2.0 derlemesini kullanmaya çalıştığımda da aynı sorunla karşılaştım. 3,5 tam profile geçmek sorunu çözer.
Palani

Benim sorunum benzerdi. Projeler farklı Framework sürümleri kullanıyordu. Ana proje 4.5 kullanıyordu ve yeni oluşturulan proje 4.5.1 kullanıyordu. Hata mesajı daha iyi olsaydı daha iyi olurdu.
L_7337

27

Aptalca bir soru sorayım: İki automapper.dll dosyası olabilir mi? Bir AutoMapperad alanı olan ve olmayan biri? Her iki projedeki yolları onaylayın.

Ayrıca usingkomutların sırasının farklı olduğunu da fark ettim . Önemli olmamalı ama onları karıştırmaya çalıştınız mı?


19

Sınıfınız derlenmiyorsa, projede olsa bile şunları kontrol edin:

  1. sınıf adının tamamen aynı olup olmadığı
  2. isim alanının tam olarak aynı olup olmadığı
  3. sınıf özelliklerinin derleme eylemi = derleme gösterip göstermediği

6
Explorer ile bir .cs dosyası kopyaladım ve ardından projeye dahil ettim. VS.Net, derleme eylemini "Derleme" yerine "İçerik" olarak ayarladı ve bu nedenle ad alanını tanımıyordu. İyi yakalama!
AUSteve

1
Sınıfı Ekle -> Sınıf özelliği ile ekledim ve derleme eylemini içeriğe ayarladı. Nedenini merak ediyor musun? Bu bana yine de yardımcı oldu, çok basit bir şey ama daha önce hiç karşılaşmadım. Bu yüzden oraya bakma zahmetine bile girmedim ve onun yerine Google'da araştırdım.
Anomaly

17

Diğer tüm cevaplar size yardımcı olmuyorsa, bu en basit çözüm olmalıdır.

Cevaplar arasında kurulumumda neyin yanlış olduğunu arıyordum, Hepsini denedim - hiçbiri işe yaramadı, Sonra Visual Studio 2018'in Microsoft tarafından geliştirildiğini fark ettim . Ben de çoğu insanın yaptığı şeyi yaptım.

Visual Studio yeniden başlatıldı ve çalıştı


Benim için çalıştı ancak yeniden başlatmadan önce bin ve obj klasörünü sildi.
Chandan YS

Stackoverflow'daki tüm yıllarımda, bu bir hataya en iyi tuzlu yanıt (aslında bir çözüm sağlayan) ve ilk yeniden başlatmada işe yaradı. uykusuzluk ftw!
Collin Beyaz

Bu işe yaradı. Bu GERÇEKTEN işe yaradı. Neşeli.
Çok deniyorum ama

12

Dosyaları içeren klasöre sağ tıklayıp Projeden Hariç Tut'u seçerek ve ardından tekrar sağ tıklayıp Projeye Dahil Et'i seçerek bu sorunu çözdüm ( dışlanan klasörü görünür hale getirmek için önce Tüm Dosyaları Göster'i etkinleştirmeniz gerekir )


Tonlarca dosya için bu hatayı aldım, sadece birini kaldırdım ve yeniden dahil ederek tüm çözüm için sorunu çözdüm.
Daryl

Neye sağ tıklamak? "Projeden hariç tut" seçeneği, klasörü çözüm gezgininden kaldırır. "Projeye Dahil Et" diye bir şey yok
Florian Winter

2
@FlorianWinter Dışarıda bırakılan klasöre sağ tıklamak için Tüm Dosyaları Göster'i açmanız gerekir . Bu, Çözüm Gezgini aracılığıyla açılabilir, Tümünü Daralt düğmesinin yanında bulunur.
user3251328

Nedenini bilmiyorum, ancak bu VS2019'da bir projeye yeni bir sınıf içeren yeni bir dosya eklediğimde çalıştı, ancak yeni sınıfın içerdiği projeye zaten bir başvuru olan başka bir projede bu sınıfın yeni bir örneğini oluşturamadım. ..¯\_(ツ)_/¯
matt.fc

7

VS2010'da tanınmayan referanslarla ilgili benzer bir sorun yaşıyorum ve buradaki cevaplar bunu düzeltemedi.

Çözümümdeki sorun, başvurulan projenin bulunduğu yolun uzantısı ile ilgiliydi. SVN ile çalışırken, bazı testler yapmak için bir deponun bir dalını yaptım ve bu dal, yol yapısında iki seviye arttı, bu nedenle yol, pencerelerde kullanılamayacak kadar uzadı. Bu herhangi bir hata oluşturmadı, ancak proje referansının ad alanını tanımadı. Daha küçük bir yola sahip olmak için projenin konumunu düzelttiğimde her şey yolunda gitti.


2
Bu bizim için de bir sorundu ve soruna neden olan yol uzunluğuydu. VS, aldığımız hata oldukça yanıltıcı olduğundan, bu durumda daha iyi bir hata vermek için daha iyi bir iş çıkarmalı.
VoodooChild

Cevabınız sayesinde aklıma bir fikir geldi. Projemin yoluna baktım ve kaynak ağacının oluşturduğu kök klasörün adında _ yerine "% 20" olduğunu fark ettim. _ Olarak değiştirdim ve şimdi her şey iyi çalışıyor.
Fernando Wolff

5

Benim durumumda, başvurulan dll .Net Framework'ün daha yüksek sürümünde oluşturuldu. Referansı ekledikten sonra kullanabilirim. Ancak, bir derleme yaptığım anda, 'eksik referans' hatası ortaya çıkacaktır. Hata gidecek dll'yi yenilerim ama asla kurulmaz. Bu gönderi, çerçeve sürümünü kontrol etmemi sağladı ve böylece başvurulan projeyi aynı sürümde oluşturarak çözebildim.


3

Belki de projenin tür tablosu yanlış bir durumda. Referansı kaldırmaya / eklemeye çalışırdım ve bu işe yaramazsa, başka bir proje oluşturur, kodumu içeri aktarır ve işe yarayıp yaramadığına bakardım.

VS 2005'i kullanırken bununla karşılaştım, MS'in bu sorunu şimdiye kadar çözmesi beklenirdi ..


bu sorunu çözebilir misin?
Fran_gg7

3

Soru zaten verildi, ancak kontrol edilmesi gereken henüz açıklanmamış ek ayrıntılar var.

Ben de bu davranışı yaşıyordum, proje B projesinde A projesinde referans verildi, ancak proje B'nin ad alanı A projesinde tanınmadı. Biraz kazı yaptıktan sonra, yolumun çok uzun olduğunu buldum. Projelerin yolunu (hem A hem de B) düşürerek referanslar görünür ve kullanılabilir hale geldi.

Bu teoriyi çok daha düşük bir yol derinliğinde proje C oluşturarak test ettim. A projesinde C projesine başvurdum. Referanslar beklendiği gibi doğru çalıştı. Daha sonra C projesini çözümden çıkardım, sadece C projesini B projesiyle aynı olan derin bir yola taşıdım ve C projesini çözüme geri ekledim ve derlemeye çalıştım. Daha sonra artık C nesnelerini yansıtmak için görünürlüğüm yoktu.


2

Benim durumumda bir sınıf kitaplığı kopyaladım ve proje özelliklerinde "Montaj Adı" nı değiştirmedim, bu yüzden bir DLL diğerinin üzerine yazıyordu ...


2

Bu Visual Studio 2019'da başıma geldi. Benim için çözümümde başka bir projeye başvurmaya çalışıyordum. Başkalarına yardımcı olma ihtimaline karşı attığım adımlar şunlardır:

  1. Referans vermek istediğim projenin Referanslar altında listelendiğinden emin oldum
  2. Her iki projenin de .NET Framework'ün doğru sürümünü kullanması sağlandı
  3. Proje oluşturuldu (yeşil "Başlat" oku tıklandı)

Kafam karıştı çünkü 1. ve 2. adımlardan sonra hala hatayı alıyordum, ancak projeyi oluşturmak sorunu çözmüş gibiydi.


1

Derleme sırasında iyi olmasına rağmen yürütme sırasında benzer ad alanı / yöntemin bulunamaması sorunuyla karşılaştım ve bunun nedeni, başvurduğum derlemenin GAC'ye dağıtılması ve o zamandan beri değiştirilmiş olması, yani derlemeye başvurduğumda Visual Studion'da en güncel olanı kullanıyordu, ancak çalışma zamanı sırasında GAC ​​için sürüm kullanılmıştı.


1

Benim durumumda hatayı sadece VS 2015'te aldım. Projeyi VS 2017'de açarken hata gitmişti.


1

Çılgın. Biliyorum.

Burada tüm seçenekleri denedim. Yeniden başlatma, temizleme, oluşturulan DLL'leri manuel olarak kontrol etme (bu, gerçekten kendinizin olup olmadığını anlamak için paha biçilmezdir).

MSBuild'in Ayrıntı düzeyini Seçenekler'de "Ayrıntılı" olarak ayarlayarak çalıştırdım.


benim için, Yapılandırma Adı x86 olduğunda PlatformTarget'ta AnyCpu'ya ayarlanmış bir yapı yapılandırmasıydı. Bu ayar bulmama yardımcı oldu.
Dbl

1

Bu soru orijinal poster için zaten yanıtlanmıştır, ancak birisinin bir MS-Test projesinde bununla karşılaşması durumunda:

Visual Studio içinden Test menüsü -> Test Ayarları -> Varsayılan İşlemci Mimarisi'ne tıklayın ve mimarinin referans yaptığınız diğer derlemenin mimarisiyle eşleştiğinden emin olun. Diğer montaj x64 ise ve test ayarlarınız x86 ise, orijinal posterin sahip olduğu belirtilerle karşılaşabilirsiniz.


0

Xamarin projesi üzerinde çalışıyordum ve her zamanki gibi, obj klasörünü silmek ve yeniden oluşturmak sorunumu çözdü, VS'min tanımadığı ad alanı kendi projem BTW'deki bir koddu


0

Benim durumumda bu montajı kaldırmak / eklemek işe yaradı.


0

Ben de benzer bir sorunla karşılaştım, bu sorunu gidermek biraz zaman aldı, bu yüzden paylaşmayı düşündüm:

Benim durumumda çözülemeyen ad alanı Company.Project.Common.Models.EF idi . Yeni bir Company.Project.BusinessLogic.Common ad alanına bir dosya eklemiştim .

Dosyaların çoğunda bir

using Company.Project;

Ve sonra modellere Common.Models.EF olarak başvurulur . Ayrıca bir

using Company.Project.BusinessLogic;

VS, hangi ad alanının kullanılacağını belirleyemediği için başarısız oluyordu.

Çözüm, ikinci ad alanını Company.Project.BusinessLogic.CommonServices olarak değiştirmektir .


0

Visual Studio 2019'u yeniden başlatmak - bu yaptı.


Vaccano şunu yazdı: Denedim: Visual Studio
Woworks

Görsel stüdyosunu yeniden başlattım. işe yaradı.
Nisanur

0

Bunu eski bir gönderi olarak kabul ettim ama yine de bu öneriyi, bahsettiğini görmediğim için yanıtlar listesine ekleyeceğimi düşündüm.

Çözümlenmemiş referans, Çözümdeki başka bir Proje bağlamında mevcutsa:

Sorunu olan Projeye sağ tıklayın, Bağımlılıkları Oluştur -> Proje Bağımlılıkları'nı seçin ve referans için istenen Projenin seçildiğinden emin olun.

Gönderide anlatılanla aynı sorunu yaşadım, ancak çözüm için önerilen yöntemlerin hiçbiri işe yaramadı. VS'de daha önce hiç böyle bir tuhaflık görmemiştim (şu anda VS 2019'u çalıştırıyor)

Potansiyel ad alanı sorunlarını ve daha bariz nedenleri kontrol ettim ve hiçbir şey mantıklı gelmedi. Intellisense, diğer Projenin varlığını bile kabul etti ve bir using ifadesine önerdi, ancak kullanım referansını ekledikten sonra bile; VS 2019 hala diğer projeyi kabul etmiyor.

Bağımlılığı açıklanan şekilde zorlamak sorunu çözdü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.