Namespace को मान्यता नहीं है (भले ही यह वहां है)


145

मुझे यह त्रुटि मिल रही है:

प्रकार या नाम स्थान का नाम 'AutoMapper' नहीं पाया जा सका (क्या आप किसी निर्देश या असेंबली संदर्भ का उपयोग कर गायब हैं?)

मज़ेदार बात यह है कि मेरी परियोजना में यह संदर्भ पहले से ही है:

ProjectThatFails

और यह मेरा कोड है:

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

दूसरी अजीब बात यह है कि मेरे पास मेरे समाधान में दो अन्य परियोजनाएं हैं जो दोनों AutoMapper का उपयोग करती हैं और ठीक उसी AutoMapper.dll फ़ाइल को संदर्भित कर रही हैं। वे दोनों पूरी तरह से ठीक काम करते हैं।

यहाँ एक का एक स्क्रीन शॉट है:

ProjectThatWorks

और यहाँ वह कोड है (जो ठीक संकलन करता है):

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

दोनों संदर्भों में गुण पृष्ठ पर समान डेटा है।

मैं क्या खो रहा हूँ?

मैंने कोशिश की:

  1. Visual Studio को पुनरारंभ करना
  2. एक का उपयोग कर बयान के बिना संदर्भित (यानी AutoMapper.Mapper.CreateMap)
  3. स्वच्छ और पुनर्निर्माण

कोई अन्य विचार?


1
क्या संदर्भ पथ गलत है? शायद इसे एक निरपेक्ष पथ के साथ जोड़ा गया था, लेकिन DLL को स्थानांतरित कर दिया गया है?
कीसिंगनर

जवाबों:


259

यह सुनिश्चित करने के लिए जांचें कि आपकी परियोजना .NET फ्रेमवर्क 4 क्लाइंट प्रोफाइल का उपयोग करने के लिए सेट नहीं है।

आप अपनी परियोजना (समाधान नहीं) पर राइट-क्लिक करके इसे चेक / बदल सकते हैं, गुण -> चुनें अनुप्रयोग -> लक्ष्य रूपरेखा । लक्ष्य की रूपरेखा उस पृष्ठ पर एक गिरावट है।

यह विजुअल स्टूडियो में एक समस्या है (मैं तो इसे एक बग कहना चाहता हूं)। AutoMapper को असेंबली की आवश्यकता होती है जिसे .NET फ्रेमवर्क 4 क्लाइंट प्रोफाइल से बाहर रखा गया है। चूँकि आपकी परियोजना उस रूपरेखा के उस संस्करण का उपयोग कर रही है जो इसे तोड़ता है।

जब आप जिस प्रोजेक्ट का संदर्भ दे रहे हैं उसके लिए .NET फ्रेमवर्क संस्करण संदर्भ बनाने वाली परियोजना से अधिक होने पर एक समान त्रुटि निर्माण प्रक्रिया के लिए प्रचारित करेगी। यानी 4.5 को लक्षित करने वाली एक परियोजना जो 4.5.1 को लक्षित करने वाली परियोजना का संदर्भ देती है, आपको यही त्रुटि देगी।

ऐसा होने पर एक बेहतर त्रुटि संदेश होने की आवश्यकता है क्योंकि इस बारे में कोई तर्कसंगत स्पष्टीकरण नहीं है कि यह क्यों नहीं बनेगा क्योंकि त्रुटि संदेश आपको उस विधानसभा का संदर्भ देने के लिए कहता है जिसे आपने स्पष्ट रूप से संदर्भित किया है।


7
यह वही था जो समस्या थी! धन्यवाद! मैं मानता हूं कि यह त्रुटि बहुत भ्रामक है। मुझे यह भी नहीं पता है कि क्लाइंट प्रोफाइल नए प्रोजेक्ट के लिए डिफ़ॉल्ट क्यों है। अधिकांश कंप्यूटरों में पूर्ण .net फ्रेमवर्क सही होने वाला है? (या एमएस सिर्फ क्लाइंट अपडेट को विंडोज अपडेट पर डालता है?) वैसे भी, मेरे द्वारा विकसित सभी कंप्यूटरों में पूर्ण रूपरेखा होगी। काश एक नए प्रोजेक्ट के लिए डिफॉल्ट को बदलने का एक तरीका होता तो यह मुझे इस तरह काटता। वैसे भी। एक बार फिर धन्यवाद! मैं फंस गया था और मैंने वहाँ देखने के लिए नहीं सोचा था।
वेकैनो

मेरे साथ भी ठीक यही समस्या आई! मेरे विंडोज़ सेवा परियोजना में प्रकारों को मान्यता नहीं दी गई थी, भले ही मैंने संदर्भों को सही ढंग से जोड़ा हो। मैंने .NET फ्रेमवर्क 4 क्लाइंट प्रोफ़ाइल से .NET फ्रेमवर्क में लक्ष्य रूपरेखा को बदल दिया। ध्यान दें कि मुझे इसे संकलित करने के लिए अपने संदर्भों को भी फिर से जोड़ना पड़ा। दृश्य स्टूडियो 2010 में एक मुद्दा लगता है। धन्यवाद और बुडापेस्ट की ओर से बधाई।
वरगा तमस

अच्छा, यह भी मेरे साथ हुआ। मेरे परीक्षण प्रोजेक्ट ने संदर्भित नामस्थानों को नहीं पहचाना, भले ही वे वहां थे। ऐसा इसलिए था क्योंकि मैंने अपनी लाइब्रेरी को .NET 4.5 प्लेटफॉर्म में बदल दिया था, लेकिन परीक्षण परियोजना 4.0 के रूप में बनी रही। किसी भी मामले में, आपका जवाब मुझे सही रास्ते पर ले जाता है। धन्यवाद, यह पता लगाने के लिए।
जुल्का पूरनें

मैं एक ही मुद्दे का सामना करना पड़ा जब मैंने .net 3.5 असेंबली .Net 3.5 क्लाइंट प्रोफाइल प्रोजेक्ट में .Net 2.0 असेंबली का उपयोग करने की कोशिश की। और 3.5 पूर्ण प्रोफ़ाइल पर स्विच करने से समस्या हल हो जाती है।
पलानी

मेरा मुद्दा भी ऐसा ही था। परियोजनाएं विभिन्न फ्रेमवर्क संस्करणों का उपयोग कर रही थीं। मुख्य परियोजना 4.5 का उपयोग कर रही थी और नव निर्मित परियोजना 4.5.1 का उपयोग कर रही थी। यह अच्छा होगा यदि त्रुटि संदेश बेहतर था।
L_7337

27

मुझे एक बेवकूफ सवाल पूछना है: वहाँ दो automapper.dll फ़ाइलें हो सकता है ? एक AutoMapperनेमस्पेस और एक बिना? दोनों परियोजनाओं में पथ की पुष्टि करें।

मैंने यह भी देखा कि usingआज्ञाओं का क्रम अलग है। यह बात नहीं होनी चाहिए, लेकिन क्या आपने उन्हें फेरबदल करने की कोशिश की है?


18

यदि आपकी कक्षा संकलन नहीं करती है, भले ही यह परियोजना में हो

  1. क्या कक्षा का नाम बिल्कुल समान है
  2. क्या नाम स्थान बिल्कुल समान है
  3. क्या वर्ग गुण निर्माण क्रिया दिखाना = संकलित करना

6
मैंने एक्सप्लोरर के साथ एक .cs फ़ाइल की प्रतिलिपि बनाई और फिर इसे प्रोजेक्ट में शामिल किया। VS.Net ने "कम्पाइल" के बजाय बिल्ड एक्शन को "कॉन्टेंट" के रूप में सेट किया और इसलिए नामस्थान को मान्यता नहीं दे रहा था। अच्छी पकड़!
ऑसटेव

1
मैंने क्लास को ऐड -> क्लास फीचर के माध्यम से जोड़ा, और इसने बिल्ड एक्शन को सामग्री पर सेट किया। सिर्फ क्यों के लिए उत्सुक? इससे मुझे वैसे भी कुछ सरल हुआ, लेकिन पहले कभी सामना नहीं हुआ। यही वजह है कि मैंने वहां देखने की जहमत नहीं उठाई, और इसके बजाय उसे गुगला दिया।
विसंगति

14

यदि अन्य सभी उत्तर आपकी सहायता नहीं करते हैं तो यह सबसे सरल उपाय है

मैं खोज रहा था कि उत्तर के बीच मेरे सेटअप में क्या गड़बड़ है, उन सभी की कोशिश की - कोई भी काम नहीं किया, तब मुझे एहसास हुआ कि दृश्य स्टूडियो 2018 माइक्रोसॉफ्ट द्वारा विकसित किया गया था । इसलिए मैंने वही किया जो ज्यादातर लोग करते हैं,

Visual Studio को पुनरारंभ किया और यह काम किया


मेरे लिए काम किया है लेकिन पुनः आरंभ करने से पहले बिन और obj फ़ोल्डर को हटा दिया।
चंदन वाईएस

स्टैकओवरफ़्लो पर मेरे सभी वर्षों में, यह बग के लिए सबसे अच्छा नमकीन प्रतिक्रिया है (जो वास्तव में एक समाधान प्रदान करता है) और इसने पहले पुनरारंभ पर काम किया। अनिद्रा ftw!
कॉलिन व्हाइट

12

मैंने फ़ाइलों को शामिल करने वाले फ़ोल्डर पर राइट क्लिक करके और प्रोजेक्ट से बाहर छोड़ दें और फिर दाईं ओर फिर से क्लिक करके और प्रोजेक्ट में शामिल करें का चयन करके इस समस्या को हल किया (आपको पहली बार बाहर किए गए फ़ोल्डर को दिखाई देने के लिए सभी फ़ाइलें दिखाने में सक्षम करना होगा)


मेरे पास फ़ाइलों के टन के लिए यह त्रुटि थी, बस एक को हटाने और इसे फिर से शामिल करने से पूरे समाधान के लिए समस्या हल हो गई।
डेरिल

किस पर राइट-क्लिक करें? "प्रोजेक्ट से बाहर निकालें" समाधान एक्सप्लोरर से फ़ोल्डर को हटा देता है। कोई "इनक्लूड इन प्रोजेक्ट" नहीं है
फ्लोरियन विंटर

2
@FlorianWinter उस बहिष्कृत फ़ोल्डर पर राइट क्लिक करें जिसके लिए आपको सभी फ़ाइलें दिखाना आवश्यक है । यह समाधान एक्सप्लोरर के माध्यम से चालू किया जा सकता है, यह संक्षिप्त बटन के बगल में पाया जाता है ।
user3251328

पता नहीं क्यों, लेकिन इसने वीएस २०१ ९ में काम किया जब मैंने एक नई फाइल को एक प्रोजेक्ट में एक नई क्लास से जोड़ा, लेकिन एक अन्य प्रोजेक्ट में उस क्लास का एक नया उदाहरण नहीं बना सका, जिसमें पहले से ही नए क्लास के प्रोजेक्ट से संबंधित था। ..¯\_(ツ)_/¯
मैट

7

मुझे VS2010 में मान्यता प्राप्त नहीं होने के संदर्भ में एक समान समस्या है और इसमें दिए गए उत्तर इसे ठीक करने में सक्षम नहीं थे।

मेरे समाधान में समस्या उस पथ के विस्तार से संबंधित थी जहां परियोजना संदर्भित थी। जैसा कि मैं एसवीएन के साथ काम कर रहा हूं, मैंने कुछ परीक्षण करने के लिए एक रिपॉजिटरी की एक शाखा बनाई और उस शाखा ने पथ संरचना में दो स्तरों को बढ़ाया, इसलिए पथ खिड़कियों में प्रयोग करने योग्य होने के लिए बहुत लंबा हो गया। इससे कोई त्रुटि नहीं हुई लेकिन परियोजना के संदर्भ के नाम स्थान को मान्यता नहीं दी गई। जब मैंने एक छोटे से रास्ते के लिए परियोजना के स्थान को सही किया तो सब कुछ ठीक हो गया।


2
यह हमारे लिए भी एक मुद्दा था और यह पथ की लंबाई थी जो समस्या पैदा कर रही थी। वीएस को उस मामले में एक बेहतर त्रुटि देने का एक बेहतर काम करने की आवश्यकता है क्योंकि हमें मिली त्रुटि बहुत भ्रामक थी।
वूडूचाइल्ड

आपके उत्तर के लिए मेरे दिमाग में एक विचार आया। मैंने अपनी परियोजना के मार्ग को देखा और महसूस किया कि रूट फ़ोल्डर, जो स्रोत पेड़ द्वारा बनाया गया था, के नाम में _ के बजाय "% 20" था। मैंने इसे _ में बदल दिया और अब सब कुछ ठीक है।
फर्नांडो वोल्फ

5

मेरे मामले में, .net फ्रेमवर्क के उच्च संस्करण में संदर्भित dll का निर्माण किया गया था। संदर्भ जोड़ने के बाद, मैं इसका उपयोग कर सकता हूं। लेकिन जैसे ही मैंने एक निर्माण किया, 'लापता संदर्भ' त्रुटि पॉप हो जाएगी। मैं ताज़ा करूँगा dll त्रुटि चली जाएगी लेकिन यह कभी नहीं बनेगी। इस पोस्ट ने मुझे फ्रेमवर्क संस्करण की जाँच की और इस प्रकार मैं उसी संस्करण में संदर्भित परियोजना का निर्माण करके इसे हल कर सका।


3

शायद परियोजना का प्रकार तालिका गलत स्थिति में है। मैं संदर्भ को हटाने / जोड़ने की कोशिश करूंगा और यदि वह काम नहीं करता है, तो दूसरी परियोजना बनाएं, अपना कोड आयात करें और देखें कि क्या काम करता है।

मैं वीएस 2005 का उपयोग करते हुए इसमें भाग गया, किसी को उम्मीद होगी कि एमएस ने उस विशेष समस्या को अब तक ठीक कर लिया है।


क्या आप इस समस्या को ठीक कर सकते हैं?
Fran_gg7

3

प्रश्न पहले से ही सम्मानित किया गया है, लेकिन अतिरिक्त विवरण नहीं हैं जो अभी तक वर्णित नहीं हैं जिन्हें जांचने की आवश्यकता है।

मेरा भी यह व्यवहार था, जहाँ प्रोजेक्ट B को प्रोजेक्ट A में संदर्भित किया गया था, लेकिन प्रोजेक्ट A में प्रोजेक्ट B के नाम स्थान को मान्यता नहीं मिली थी। कुछ खुदाई के बाद, मैंने पाया कि मेरा रास्ता बहुत लंबा था। परियोजनाओं (ए और बी दोनों) के मार्ग को कम करके, संदर्भ दिखाई और उपलब्ध हो गए।

मैंने बहुत कम पथ गहराई पर प्रोजेक्ट सी बनाकर इस सिद्धांत का परीक्षण किया। मैंने प्रोजेक्ट C को प्रोजेक्ट A में संदर्भित किया। संदर्भ ने अपेक्षा के अनुरूप सही ढंग से काम किया। मैंने समाधान से प्रोजेक्ट C को हटा दिया, प्रोजेक्ट C को एक गहरे पथ पर ले जाया, प्रोजेक्ट B के समान, और प्रोजेक्ट C को समाधान में वापस जोड़ा, और संकलन करने का प्रयास किया। मेरे पास अब C ऑब्जेक्ट्स को प्रोजेक्ट करने के लिए कोई दृश्यता नहीं थी।


2

मेरे मामले में मैंने एक क्लासरल कॉपी की थी, और प्रोजेक्ट संपत्तियों में "असेंबली नेम" नहीं बदला था, इसलिए एक डीएलएल दूसरे को अधिलेखित कर रहा था ...


2

यह दृश्य स्टूडियो 2019 में मेरे साथ हुआ। मेरे लिए, मैं अपने समाधान में एक अन्य परियोजना का संदर्भ देने की कोशिश कर रहा था। इस मामले में मैंने जो कदम उठाए, वह किसी और की मदद करता है:

  1. यह सुनिश्चित करना कि मैं जिस परियोजना को संदर्भित करना चाहता हूं, उसे संदर्भ के तहत सूचीबद्ध किया गया था
  2. सुनिश्चित करें कि दोनों प्रोजेक्ट .NET फ्रेमवर्क के सही संस्करण का उपयोग कर रहे हैं
  3. निर्मित परियोजना (क्लिक की गई हरी "स्टार्ट" एरो)

मैं उलझन में था क्योंकि मुझे अभी भी चरण 1 और 2 के बाद त्रुटि मिल रही थी, लेकिन परियोजना का निर्माण इसे हल करने के लिए लग रहा था।


1

मुझे निष्पादन के दौरान नाम स्थान / पद्धति की समान समस्या का सामना नहीं करना पड़ा, हालांकि संकलन के दौरान यह ठीक था, और इसका कारण यह प्रतीत होता है कि मैं जिस विधानसभा का उल्लेख कर रहा था, उसे जीएसी में तैनात किया गया था और तब से बदल दिया गया था, इसलिए जब मैंने विधानसभा का संदर्भ लिया विजुअल स्टडीज में यह सबसे हाल ही में उपयोग किया गया था, लेकिन रनटाइम के दौरान संस्करण जीआरएसी का उपयोग किया गया था।


1

मेरे मामले में मुझे केवल वीएस 2015 में त्रुटि मिली। वीएस 2017 में परियोजना को खोलने पर त्रुटि हो गई थी।


1

पागल। मुझे पता है।

यहां सभी विकल्पों की कोशिश की। उत्पन्न, सफाई, मैन्युअल रूप से उत्पन्न DLL में जाँच (यह समझने के लिए अमूल्य है अगर यह वास्तव में अपने आप को गड़बड़ है)।

मुझे यह विकल्प में "विस्तृत" MSBuild की शब्दशः निर्धारित करके काम करने के लिए मिला।


मेरे लिए यह एक बिल्ड कॉन्फ़िगरेशन था, जोकि कॉन्फ़िगरेशन नाम x86 होने पर PlatformTarget में AnyCpu के लिए सेट था। इस सेटिंग ने मुझे इसे खोजने में मदद की।
Dbl

1

मूल पोस्टर के लिए इस सवाल का जवाब पहले ही दिया जा चुका है, लेकिन यदि कोई एमएस-टेस्ट प्रोजेक्ट में इसका सामना करता है:

विजुअल स्टूडियो के भीतर से, टेस्ट मेनू पर क्लिक करें -> टेस्ट सेटिंग्स -> डिफॉल्ट प्रोसेसर आर्किटेक्चर और यह सुनिश्चित करें कि आर्किटेक्चर उस अन्य असेंबली से मेल खाता हो जिसे आप संदर्भित कर रहे हैं। यदि अन्य असेंबली x64 है और आपकी परीक्षण सेटिंग्स x86 हैं, तो आप उन लक्षणों का अनुभव कर सकते हैं जो मूल पोस्टर में थे।


0

मैं Xamarin परियोजना पर काम कर रहा था और हमेशा की तरह, obj फ़ोल्डर को हटाने और पुनर्निर्माण ने मेरी समस्या को हल कर दिया, मेरे वीएस नाम का नाम स्थान मेरे अपने प्रोजेक्ट BTW में एक कोड नहीं था



0

मेरे पास एक समान मुद्दा था, जिसे समस्या निवारण में थोड़ा सा समय लगा, इसलिए मैंने इसे साझा करने के लिए सोचा:

मेरे मामले में जिन नामों को हल नहीं किया जा सका, वह Company.Project.Common.Models.EF था । मैंने एक नई Company.Project.BusinessLogic.Common में एक फ़ाइल जोड़ी थी नाम स्थान ।

अधिकांश फ़ाइलों में एक था

using Company.Project;

और फिर कॉमन.मॉडल्स.ईएफ के रूप में मॉडल का संदर्भ देते हैं । वे सभी फाइलें जिनमें ए

using Company.Project.BusinessLogic;

वीएस के रूप में फेल हो रहे थे जो यह निर्धारित नहीं कर सके कि किस नाम स्थान का उपयोग करना है।

समाधान के लिए दूसरा नाम स्थान बदलकर Company.Project.BusinessLogic.CommonServices कर दिया गया है


-1

विजुअल स्टूडियो 2019 को फिर से शुरू करना - जिसने ऐसा किया।


वेकानो ने लिखा: मैंने कोशिश की: विजुअल स्टूडियो को फिर से शुरू करना
वाह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.