ไม่รู้จัก 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 ก็ถูกย้ายไป?
kevingessner

คำตอบ:


259

ตรวจสอบให้แน่ใจว่าโครงการของคุณไม่ได้ตั้งค่าให้ใช้โปรไฟล์ลูกค้า. NET Framework 4

คุณสามารถตรวจสอบ / เปลี่ยนแปลงได้โดยการคลิกขวาที่โครงการของคุณ (ไม่ได้แก้ปัญหา) เลือกProperties -> แอพลิเคชัน -> กรอบเป้าหมาย เฟรมเวิร์กเป้าหมายคือดร็อปดาวน์บนหน้านั้น

นี่เป็นปัญหาใน Visual Studio (ฉันจะไปไกลถึงขั้นเรียกว่าเป็นข้อบกพร่อง) AutoMapper ต้องการแอสเซมบลีที่แยกออกจากโปรไฟล์ไคลเอนต์. NET Framework 4 เนื่องจากโครงการของคุณใช้เฟรมเวิร์กเวอร์ชันดังกล่าว

ข้อผิดพลาดที่คล้ายกันจะแพร่กระจายไปยังกระบวนการสร้างเมื่อรุ่น. NET Framework สำหรับโครงการที่คุณอ้างอิงสูงกว่าโครงการที่ทำการอ้างอิง เช่นโครงการการกำหนดเป้าหมาย 4.5 ที่อ้างอิงถึงการกำหนดเป้าหมายโครงการ 4.5.1 จะทำให้คุณมีข้อผิดพลาดเดียวกันนี้

จำเป็นต้องมีข้อความแสดงข้อผิดพลาดที่ดีกว่าเมื่อเกิดเหตุการณ์นี้ขึ้นเนื่องจากไม่มีคำอธิบายที่มีเหตุผลว่าทำไมมันจึงไม่สร้างเนื่องจากข้อความแสดงข้อผิดพลาดบอกให้คุณอ้างอิงแอสเซมบลีที่คุณอ้างอิงอย่างชัดเจน


7
นี่คือสิ่งที่เป็นปัญหา! ขอบคุณ! ฉันยอมรับว่าข้อผิดพลาดนี้ทำให้เข้าใจผิดมาก ฉันยังไม่เข้าใจว่าทำไมโปรไฟล์ลูกค้าจึงเป็นค่าเริ่มต้นสำหรับโครงการใหม่ คอมพิวเตอร์ส่วนใหญ่จะมี. net framework เต็มใช่มั้ย (หรือ MS ใส่กรอบงานไคลเอนต์ใน Windows Update หรือไม่) อย่างไรก็ตามคอมพิวเตอร์ทุกเครื่องที่ฉันพัฒนาจะมีกรอบงานที่สมบูรณ์ ฉันหวังว่าจะมีวิธีการเปลี่ยนค่าเริ่มต้นสำหรับโครงการใหม่ดังนั้นมันจึงกัดฉันแบบนี้ อย่างไรก็ตาม. ขอบคุณอีกครั้ง! ฉันติดอยู่และฉันไม่คิดว่าจะดูที่นั่น
Vaccano

ฉันมีปัญหาเดียวกันทุกประการ! ประเภทไม่เป็นที่รู้จักในโครงการบริการ windows ของฉันแม้ว่าฉันได้เพิ่มการอ้างอิงอย่างถูกต้อง ฉันเปลี่ยนเฟรมเวิร์กเป้าหมายจาก. NET Framework 4 ไคลเอนต์โปรไฟล์เป็น. NET Framework 4 โปรดทราบว่าฉันยังต้องเพิ่มการอ้างอิงของฉันอีกครั้งเพื่อให้คอมไพล์ ดูเหมือนจะเป็นปัญหาใน Visual Studio 2010 ขอบคุณและคำทักทายจากบูดาเปสต์
วาร์กาทามาส

ดีมากสิ่งนี้ก็เกิดขึ้นกับฉันเช่นกัน โครงการทดสอบของฉันไม่รู้จักเนมสเปซที่อ้างอิงถึงแม้ว่าจะอยู่ที่นั่น นั่นเป็นเพราะฉันเปลี่ยนห้องสมุดของฉันเป็นแพลตฟอร์ม. NET 4.5 แต่โครงการทดสอบยังคงเป็น 4.0 ไม่ว่าในกรณีใดคำตอบของคุณจะนำฉันไปสู่เส้นทางที่ถูกต้อง ขอบคุณสำหรับการหาสิ่งนี้
Jukka Puranen

ฉันประสบปัญหาเดียวกันเมื่อฉันพยายามใช้. Net 2.0 assembly ในโปรเจ็กต์โปรไฟล์ลูกค้า. Net 3.5 และเปลี่ยนเป็น 3.5 โปรไฟล์แบบเต็มเพื่อแก้ปัญหา
Palani

ปัญหาของฉันคล้ายกัน โครงการต่าง ๆ ใช้รุ่น Framework ที่แตกต่างกัน โครงการหลักใช้ 4.5 และโครงการที่สร้างขึ้นใหม่ใช้ 4.5.1 มันจะดีถ้าข้อความแสดงข้อผิดพลาดดีขึ้น
L_7337

27

ให้ฉันถามคำถามงี่เง่า: อาจมีสองไฟล์automapper.dll ? หนึ่งที่มีAutoMapperเนมสเปซและอีกหนึ่งที่ไม่มี ยืนยันเส้นทางในทั้งสองโครงการ

ฉันยังสังเกตเห็นว่าลำดับของusingคำสั่งนั้นแตกต่างกัน มันไม่สำคัญหรอก แต่คุณได้พยายามจะสับมันเหรอ?


18

ถ้าคลาสของคุณไม่ได้คอมไพล์แม้ว่าจะอยู่ในโปรเจ็กต์ให้ตรวจสอบสิ่งเหล่านี้:

  1. ไม่ว่าชื่อคลาสจะเหมือนกันทุกประการ
  2. ไม่ว่าจะเป็นชื่อพื้นที่เหมือนกันทุกประการ
  3. คุณสมบัติคลาสแสดงว่า build action = compile หรือไม่

6
ฉันคัดลอกไฟล์. cs กับ Explorer แล้วรวมไว้ในโครงการ VS.Net ตั้งค่าการสร้างเป็น "เนื้อหา" แทน "รวบรวม" และดังนั้นจึงไม่รู้จัก namespace จับดี!
AUSteve

1
ฉันเพิ่มคลาสผ่านคุณสมบัติ Add -> Class และตั้งค่าการดำเนินการบิลด์ลงในเนื้อหา แค่อยากรู้ว่าทำไม? สิ่งนี้ช่วยฉันได้บ้างมีบางอย่างที่เรียบง่าย แต่ไม่เคยพบมาก่อน นี่คือเหตุผลที่ฉันไม่ได้รำคาญที่ดูอยู่ที่นั่นและ googled แทน
ความผิดปกติ

14

นี่จะเป็นทางออกที่ง่ายที่สุดหากคำตอบอื่น ๆ ทั้งหมดไม่ช่วยคุณ

ฉันกำลังมองหาสิ่งผิดปกติกับการตั้งค่าของฉันในหมู่คำตอบที่พยายามทั้งหมดของพวกเขา - ไม่มีที่ทำงานแล้วฉันตระหนักVisual Studio 2018ได้รับการพัฒนาโดยไมโครซอฟท์ ดังนั้นฉันจึงทำสิ่งที่คนส่วนใหญ่ทำ

เริ่มต้น Visual Studio ใหม่ และใช้งานได้


ใช้งานได้สำหรับฉัน แต่ถูกลบ bin และ obj โฟลเดอร์ก่อนที่จะรีสตาร์ท
Chandan YS

ในทุก ๆ ปีของฉันเกี่ยวกับ stackoverflow นี่เป็นการตอบสนองที่ดีที่สุดต่อข้อผิดพลาดของเค็ม นอนไม่หลับ ftw!
Collin White

12

ฉันแก้ไขปัญหานี้ได้ด้วยการคลิกขวาที่โฟลเดอร์ที่มีไฟล์และเลือกแยกออกจากโครงการแล้วคลิกขวาอีกครั้งและเลือกรวมในโครงการ (คุณต้องเปิดใช้งานแสดงไฟล์ทั้งหมดก่อนเพื่อให้มองเห็นโฟลเดอร์ที่แยกออก)


ฉันมีข้อผิดพลาดนี้สำหรับไฟล์จำนวนมากเพียงแค่ลบไฟล์ออกแล้วรวมถึงแก้ไขปัญหาสำหรับการแก้ไขทั้งหมด
ดาริล

คลิกขวาที่อะไร "แยกออกจากโครงการ" ลบโฟลเดอร์ออกจากตัวสำรวจโซลูชัน ไม่มี "รวมอยู่ในโครงการ"
Florian Winter

2
@FlorianWinter ให้คลิกขวาที่โฟลเดอร์ที่แยกคุณจะต้องแสดงไฟล์ทั้งหมดบน สามารถเปิดใช้งานได้ผ่าน Solution Explorer ซึ่งจะอยู่ถัดจากปุ่มยุบทั้งหมด
user3251328

ไม่ทราบว่าทำไม แต่สิ่งนี้ทำงานได้ใน VS2019 เมื่อฉันเพิ่มไฟล์ใหม่ที่มีคลาสใหม่ให้กับโครงการ แต่ไม่สามารถสร้างอินสแตนซ์ใหม่ของคลาสนั้นในโครงการอื่นซึ่งมีการอ้างอิงไปยังโครงการที่มีคลาสใหม่อยู่แล้ว ..¯\_(ツ)_/¯
matt.fc

7

ฉันมีปัญหาคล้ายกันกับการอ้างอิงที่ไม่ได้รับการยอมรับใน VS2010 และคำตอบในที่นี้ไม่สามารถแก้ไขได้

ปัญหาในการแก้ไขของฉันเกี่ยวข้องกับส่วนขยายของเส้นทางที่โครงการอ้างอิงตั้งอยู่ ขณะที่ฉันทำงานกับ SVN ฉันได้สร้างสาขาของที่เก็บเพื่อทำการทดสอบและสาขานั้นเพิ่มขึ้นสองระดับในโครงสร้างเส้นทางดังนั้นเส้นทางก็ยาวเกินไปที่จะใช้งานได้ใน windows สิ่งนี้ไม่ได้เกิดข้อผิดพลาด แต่ไม่รู้จัก namespace ของการอ้างอิงโครงการ เมื่อฉันแก้ไขที่ตั้งของโครงการให้มีเส้นทางที่เล็กลงทุกอย่างก็ดี


2
นี่เป็นปัญหาสำหรับเราเช่นกันและมันเป็นความยาวเส้นทางที่ก่อให้เกิดปัญหา VS ต้องทำงานให้ดีขึ้นเพื่อให้เกิดข้อผิดพลาดที่ดีขึ้นในกรณีนั้นเนื่องจากข้อผิดพลาดที่เราได้รับนั้นทำให้เข้าใจผิด
VoodooChild

ขอบคุณคำตอบของคุณความคิดมาถึงใจของฉัน ฉันดูเส้นทางของโปรเจ็กต์และรู้ว่าโฟลเดอร์รูทที่สร้างโดยทรีซอร์สมี "% 20" แทนที่จะเป็น _ ในชื่อ ฉันเปลี่ยนเป็น _ และทุกอย่างทำงานได้ดีในขณะนี้
Fernando Wolff

5

ในกรณีของฉัน dll ที่อ้างอิงถูกสร้างใน. Net Framework รุ่นที่สูงขึ้น หลังจากที่ฉันเพิ่มการอ้างอิงฉันสามารถใช้มันได้ แต่ทันทีที่ฉันได้สร้างข้อผิดพลาด 'การอ้างอิงที่ขาดหายไป' จะปรากฏขึ้น ฉันรีเฟรช dll ข้อผิดพลาดจะไป แต่มันจะไม่มีวันสร้าง โพสต์นี้ทำให้ฉันตรวจสอบเวอร์ชันของเฟรมเวิร์กและทำให้ฉันสามารถแก้ไขได้โดยการสร้างโครงการอ้างอิงในเวอร์ชันเดียวกัน


3

ตารางชนิดของโครงการอาจอยู่ในสถานะที่ไม่ถูกต้อง ฉันจะพยายามลบ / เพิ่มการอ้างอิงและหากไม่ได้ผลให้สร้างโครงการอื่นนำเข้ารหัสของฉันและดูว่าใช้ได้หรือไม่

ฉันวิ่งเข้าไปในขณะนี้โดยใช้ VS 2005 อย่างใดอย่างหนึ่งจะ คาดว่า MS จะแก้ไขปัญหานั้นได้ในตอนนี้ ..


คุณสามารถแก้ไขปัญหานี้ได้หรือไม่
Fran_gg7

3

คำถามได้รับรางวัลแล้ว แต่มีรายละเอียดเพิ่มเติมที่ยังไม่ได้อธิบายว่าจำเป็นต้องตรวจสอบ

ฉันก็มีพฤติกรรมนี้เช่นกันที่โครงการ B ถูกอ้างอิงในโครงการ A แต่ไม่ได้รับรู้ชื่อเนมสเปซของโครงการ B ในโครงการ A หลังจากขุดค้นพบว่าเส้นทางของฉันยาวเกินไป โดยการลดเส้นทางของโครงการ (ทั้ง A และ B) การอ้างอิงจะปรากฏให้เห็นและพร้อมใช้งาน

ฉันทดสอบทฤษฎีนี้โดยการสร้างโครงการ C ที่ระดับความลึกเส้นทางที่น้อยกว่ามาก ฉันอ้างอิงโครงการ C ในโครงการ A การอ้างอิงทำงานอย่างถูกต้องตามที่คาดไว้ ฉันลบโปรเจ็กต์ C ออกจากโซลูชันเพียงย้ายโปรเจ็กต์ C ไปยังพา ธ ลึกเช่นเดียวกับโปรเจ็กต์ B และเพิ่มโปรเจ็กต์ C กลับไปที่โซลูชันและพยายามคอมไพล์ จากนั้นฉันก็ไม่สามารถมองเห็นวัตถุ C โครงการได้อีกต่อไป


2

ในกรณีของฉันฉันได้คัดลอก classlibrary และไม่เปลี่ยน "ชื่อแอสเซมบลี" ในคุณสมบัติโครงการดังนั้น DLL หนึ่งถูกเขียนทับอีก ...


2

สิ่งนี้เกิดขึ้นกับฉันใน Visual Studio 2019 สำหรับฉันฉันพยายามอ้างอิงโครงการอื่นในโซลูชันของฉัน นี่คือขั้นตอนที่ฉันทำในกรณีที่ช่วยคนอื่น:

  1. ตรวจสอบให้แน่ใจว่าโครงการที่ฉันต้องการอ้างอิงนั้นอยู่ในรายการอ้างอิง
  2. ตรวจสอบให้แน่ใจว่าโครงการทั้งสองใช้รุ่นที่ถูกต้องของ. NET Framework
  3. สร้างโครงการ (คลิกลูกศร "เริ่ม" สีเขียว)

ฉันสับสนเพราะฉันยังคงได้รับข้อผิดพลาดหลังจากขั้นตอนที่ 1 และ 2 แต่การสร้างโครงการดูเหมือนจะแก้ไขได้


1

ฉันประสบปัญหาที่คล้ายกันของ namespace / วิธีการที่ไม่พบในระหว่างการดำเนินการแม้ว่ามันจะดีในระหว่างการรวบรวมและเหตุผลนี้ดูเหมือนว่าการชุมนุมที่ฉันได้รับการอ้างอิงถูกปรับใช้กับ GAC และตั้งแต่นั้นก็เปลี่ยนดังนั้นเมื่อฉันอ้างอิงการชุมนุม ใน Visual Studion มันใช้ล่าสุด แต่ระหว่างรันไทม์รุ่นเทียว GAC ได้ถูกนำมาใช้


1

ในกรณีของฉันฉันได้รับข้อผิดพลาดเฉพาะใน VS 2015 เมื่อเปิดโครงการใน VS 2017 ข้อผิดพลาดก็หายไป


1

บ้า. ฉันรู้ว่า.

ลองใช้ตัวเลือกทั้งหมดที่นี่ รีสตาร์ททำความสะอาดตรวจสอบ DLLs ที่สร้างขึ้นด้วยตนเอง (นี่เป็นสิ่งที่ประเมินค่าไม่ได้สำหรับการทำความเข้าใจว่าจริง ๆ แล้วมันเป็นของตัวเองที่สับสน)

ฉันได้มันมาทำงานโดยตั้งค่า Verbosity ของ MSBuild เป็น "รายละเอียด" ในตัวเลือก


สำหรับฉันมันเป็นชุดการกำหนดค่าการสร้างเป็น AnyCpu ที่ PlatformTarget เมื่อชื่อการกำหนดค่าเป็น x86 การตั้งค่านี้ช่วยให้ฉันค้นพบมัน
Dbl

1

คำถามนี้ได้รับการตอบสำหรับผู้โพสต์ต้นฉบับแล้ว แต่ในกรณีที่มีคนพบสิ่งนี้ในโครงการทดสอบ MS:

จากภายใน Visual Studio ให้คลิกเมนูทดสอบ -> ทดสอบการตั้งค่า -> สถาปัตยกรรมตัวประมวลผลเริ่มต้นและตรวจสอบให้แน่ใจว่าสถาปัตยกรรมนั้นตรงกับของแอสเซมบลีอื่นที่คุณกำลังอ้างอิง หากชุดประกอบอื่นคือ x64 และการตั้งค่าการทดสอบของคุณคือ x86 คุณอาจพบอาการที่โปสเตอร์ต้นฉบับมี


0

ฉันทำงานเกี่ยวกับโครงการ Xamarin และเช่นเคยการลบโฟลเดอร์ obj และสร้างใหม่แก้ไขปัญหาของฉัน namespace ที่ VS ของฉันไม่รู้จักคือรหัสในโครงการของตัวเอง BTW



0

ฉันมีปัญหาที่คล้ายกันซึ่งใช้เวลาในการแก้ไขปัญหาเล็กน้อยดังนั้นฉันจึงคิดว่าจะแชร์:

เนมสเปซที่ไม่สามารถแก้ไขได้ในกรณีของฉันคือ Company.Project.Common.Models.EF ฉันได้เพิ่มไฟล์ในCompany.Project.BusinessLogic.Common namespace ใหม่

ไฟล์ส่วนใหญ่มีก

using Company.Project;

จากนั้นอ้างอิงโมเดลเป็น Common.Models.EF ไฟล์ทั้งหมดที่มี

using Company.Project.BusinessLogic;

ความล้มเหลวในฐานะ VS ไม่สามารถระบุเนมสเปซที่จะใช้

วิธีแก้ไขปัญหาคือเปลี่ยนเนมสเปซที่สองเป็นCompany.Project.BusinessLogic.CommonServices


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.