Không gian tên không được công nhận (mặc dù nó ở đó)


145

Tôi nhận được lỗi này:

Không thể tìm thấy tên loại hoặc không gian tên 'AutoMapper' (bạn có thiếu chỉ thị sử dụng hoặc tham chiếu lắp ráp không?)

Điều buồn cười là tôi đã có tài liệu tham khảo đó trong dự án của mình rồi:

Dự án

Và đây là mã của tôi:

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

Một điều kỳ lạ khác là tôi có hai dự án khác trong giải pháp của mình, cả hai đều sử dụng AutoMapper và đang tham chiếu cùng một tệp AutoMapper.dll. Cả hai đều hoạt động hoàn toàn tốt.

Đây là một ảnh chụp màn hình của một:

ProjectThatWorks

và đây là mã (biên dịch tốt):

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

Cả hai tài liệu tham khảo dường như có cùng một dữ liệu trên trang thuộc tính.

Tôi đang thiếu gì?

Tôi đã thử:

  1. Khởi động lại Visual Studio
  2. Tham chiếu mà không có câu lệnh sử dụng (nghĩa là AutoMapper.Mapper.CreateMap)
  3. Làm sạch và xây dựng lại

Còn ý tưởng nào khác không?


1
Là đường dẫn tham chiếu không chính xác? Có lẽ nó đã được thêm vào với một đường dẫn tuyệt đối, nhưng DLL đã được di chuyển?
kevingessner

Câu trả lời:


259

Kiểm tra để đảm bảo rằng dự án của bạn không được thiết lập để sử dụng Hồ sơ khách hàng .NET Framework 4.

Bạn có thể kiểm tra / thay đổi điều này bằng cách nhấp chuột phải vào dự án của bạn (không phải giải pháp), chọn Thuộc tính -> Ứng dụng -> Khung mục tiêu . Khung mục tiêu là một danh sách thả xuống trên trang đó.

Đây là một vấn đề trong Visual Studio (tôi thậm chí sẽ đi xa đến mức gọi nó là một lỗi). AutoMapper yêu cầu các hội đồng được loại trừ khỏi Hồ sơ khách hàng .NET Framework 4. Vì dự án của bạn đang sử dụng phiên bản khung đó nên nó bị hỏng.

Một lỗi tương tự sẽ lan truyền đến quá trình xây dựng khi phiên bản .NET Framework cho dự án bạn đang tham chiếu cao hơn dự án tạo tham chiếu. tức là một dự án nhắm mục tiêu 4.5 tham chiếu đến một dự án nhắm mục tiêu 4.5.1 sẽ gây ra lỗi tương tự.

Cần phải có một thông báo lỗi tốt hơn khi điều này xảy ra bởi vì không có lời giải thích hợp lý nào về lý do tại sao nó không được xây dựng vì thông báo lỗi cho bạn tham chiếu một hội đồng mà bạn đã tham chiếu rõ ràng.


7
Đây chính xác là vấn đề! Cảm ơn bạn! Tôi đồng ý rằng lỗi này là rất sai lệch. Tôi cũng không hiểu tại sao Hồ sơ khách hàng là mặc định cho một dự án mới. Hầu hết các máy tính sẽ có khung .net đầy đủ phải không? (Hoặc MS chỉ đưa khung máy khách lên Windows Update?) Dù sao, tất cả các máy tính tôi phát triển sẽ có khung đầy đủ. Tôi ước có một cách để thay đổi mặc định cho một dự án mới để nó cắn tôi như thế này. Dù sao. Cảm ơn một lần nữa! Tôi đã bị mắc kẹt và tôi đã không nghĩ rằng nhìn vào đó.
Núi lửa

Tôi đã có cùng vấn đề y hệt! Các loại không được nhận dạng trong dự án dịch vụ windows của tôi ngay cả khi tôi đã thêm các tham chiếu chính xác. Tôi đã thay đổi khung mục tiêu từ .NET Framework 4 Client Profile thành .NET Framework 4. Lưu ý rằng tôi cũng phải thêm lại các tài liệu tham khảo của mình để làm cho nó biên dịch. Có vẻ là một vấn đề trong Visual Studio 2010. Cảm ơn và lời chào từ Budapest.
Varga Tamas

Tốt, điều này cũng xảy ra với tôi. Dự án thử nghiệm của tôi không nhận ra các không gian tên được tham chiếu mặc dù chúng ở đó. Điều này là do tôi đã thay đổi thư viện của mình sang nền tảng .NET 4.5 nhưng dự án thử nghiệm vẫn là 4.0. Trong mọi trường hợp, câu trả lời của bạn dẫn tôi đi đúng hướng. Cảm ơn, vì đã tìm ra điều này.
Jukka Puranen

Tôi gặp vấn đề tương tự khi tôi cố gắng sử dụng lắp ráp .Net 2.0 trong dự án hồ sơ khách hàng .Net 3.5. và chuyển sang 3,5 hồ sơ đầy đủ giải quyết vấn đề.
Palani

Vấn đề của tôi là tương tự. Các dự án đã sử dụng các phiên bản Framework khác nhau. Dự án chính đã sử dụng 4.5 và dự án mới được tạo đang sử dụng 4.5.1. Sẽ thật tốt nếu thông báo lỗi tốt hơn.
L_7337

27

Hãy để tôi hỏi một câu hỏi ngu ngốc: Có thể có hai tệp automapper.dll ? Một với một AutoMapperkhông gian tên và một không có? Xác nhận các đường dẫn trong cả hai dự án.

Tôi cũng nhận thấy rằng thứ tự của các usinglệnh là khác nhau. Nó không quan trọng, nhưng bạn đã thử xáo trộn chúng?


18

Nếu lớp của bạn không biên dịch, ngay cả khi nó nằm trong dự án, hãy kiểm tra những điều sau:

  1. tên lớp có giống nhau không
  2. không gian tên có giống hệt nhau không
  3. liệu các thuộc tính lớp hiển thị build action = compile

6
Tôi đã sao chép một tập tin .cs bằng Explorer và sau đó đưa nó vào dự án. VS.Net đặt hành động xây dựng là "Nội dung" thay vì "Biên dịch" và do đó không nhận ra không gian tên. Nắm bắt tốt!
AUSteve

1
Tôi đã thêm lớp thông qua tính năng Thêm -> Lớp và nó đặt hành động xây dựng thành nội dung. Chỉ tò mò là tại sao? Điều này đã giúp tôi dù sao, một cái gì đó rất đơn giản, nhưng chưa bao giờ gặp phải. Đó là lý do tại sao tôi thậm chí không thèm nhìn vào đó và thay vào đó.
Bất thường

14

Đây phải là giải pháp đơn giản nhất nếu tất cả các câu trả lời khác không giúp bạn

Tôi đã tìm kiếm những gì sai với thiết lập của mình trong số các câu trả lời, Đã thử tất cả chúng - không có gì hiệu quả, Sau đó tôi nhận ra Visual Studio 2018 được phát triển bởi Microsoft . Vì vậy, tôi đã làm những gì hầu hết mọi người làm,

Khởi động lại Visual Studio và nó hoạt động


Làm việc cho tôi nhưng đã xóa thư mục bin và obj trước khi khởi động lại.
Chandan YS

Trong tất cả các năm của tôi trên stackoverflow, đây là phản hồi mặn nhất đối với một lỗi (thực sự cung cấp giải pháp) và nó đã hoạt động trong lần khởi động lại đầu tiên. ftw mất ngủ!
Collin trắng

12

Tôi đã giải quyết vấn đề này bằng cách nhấp chuột phải vào thư mục chứa các tệp và chọn Loại trừ khỏi Dự án , sau đó nhấp chuột phải lần nữa và chọn Bao gồm trong Dự án (trước tiên bạn phải bật Hiển thị tất cả các tệp để hiển thị thư mục bị loại trừ)


Tôi đã gặp lỗi này đối với hàng tấn tệp, chỉ cần xóa một tệp và bao gồm lại nó đã giải quyết vấn đề cho toàn bộ giải pháp.
Daryl

Nhấp chuột phải vào cái gì? "Loại trừ khỏi dự án" xóa thư mục khỏi trình thám hiểm giải pháp. Không có "Bao gồm trong dự án"
Mùa đông vào

2
@FlorianWinter Để nhấp chuột phải vào thư mục bị loại trừ, bạn cần bật Show All Files . Điều này có thể được bật thông qua Solution Explorer, nó được tìm thấy bên cạnh nút Thu gọn tất cả .
user3251328

Không biết tại sao, nhưng điều này đã hoạt động trong VS2019 khi tôi thêm một tệp mới chứa một lớp mới vào một dự án, nhưng không thể tạo một thể hiện mới của lớp đó trong một dự án khác có tham chiếu đến dự án chứa lớp mới. ..¯\_(ツ)_/¯
matt.fc

7

Tôi có một vấn đề tương tự với các tài liệu tham khảo không được công nhận trong VS2010 và các câu trả lời ở đây không thể sửa nó.

Vấn đề trong giải pháp của tôi liên quan đến việc mở rộng đường dẫn nơi dự án được tham chiếu. Khi tôi làm việc với SVN, tôi đã tạo một nhánh của một kho lưu trữ để thực hiện một số thử nghiệm và nhánh đó đã tăng hai cấp trong cấu trúc đường dẫn, vì vậy đường dẫn trở nên quá dài để có thể sử dụng được trong các cửa sổ. Điều này đã không đưa ra bất kỳ lỗi nào nhưng không nhận ra không gian tên của tham chiếu dự án. Khi tôi sửa vị trí của dự án để có một con đường nhỏ hơn, mọi thứ đều ổn.


2
Đây cũng là một vấn đề đối với chúng tôi và chính độ dài đường dẫn đã gây ra sự cố. VS cần phải làm một công việc tốt hơn để đưa ra một lỗi tốt hơn trong trường hợp đó vì lỗi chúng tôi nhận được là khá sai lệch.
VoodooChild

Nhờ câu trả lời của bạn, một ý tưởng nảy ra trong đầu tôi. Tôi nhìn vào đường dẫn của dự án của tôi và nhận ra rằng thư mục gốc, thư mục được tạo bởi cây nguồn, có "% 20" thay vì _ trong tên. Tôi đã thay đổi nó thành _ và mọi thứ đều hoạt động tốt.
Fernando Wolff

5

Trong trường hợp của tôi, dll được tham chiếu đã được xây dựng trong phiên bản cao hơn của .Net Framework. Sau khi tôi thêm tài liệu tham khảo, tôi có thể sử dụng nó. Nhưng ngay sau khi tôi thực hiện một bản dựng, lỗi 'thiếu tham chiếu' sẽ xuất hiện. Tôi làm mới dll lỗi sẽ xảy ra nhưng nó sẽ không bao giờ được xây dựng. Bài đăng này khiến tôi kiểm tra phiên bản khung và do đó tôi có thể giải quyết nó bằng cách xây dựng dự án được tham chiếu trong cùng một phiên bản.


3

Có lẽ bảng loại của dự án ở trạng thái không chính xác. Tôi sẽ cố gắng xóa / thêm tham chiếu và nếu điều đó không hiệu quả, hãy tạo một dự án khác, nhập mã của tôi và xem liệu nó có hoạt động không.

Tôi đã gặp phải điều này trong khi sử dụng VS 2005, người ta sẽ mong đợi MS đã khắc phục vấn đề cụ thể đó ngay bây giờ ..


bạn có thể khắc phục vấn đề này?
Fran_gg7

3

Câu hỏi đã được trao, nhưng có những chi tiết bổ sung chưa được mô tả cần được kiểm tra.

Tôi cũng có hành vi này, trong đó dự án B được tham chiếu trong dự án A, nhưng không gian tên của dự án B không được công nhận trong dự án A. Sau một số lần đào, tôi thấy con đường của mình quá dài. Bằng cách giảm đường dẫn của các dự án (cả A và B), các tham chiếu trở nên hữu hình và khả dụng.

Tôi đã thử nghiệm lý thuyết này bằng cách tạo dự án C ở độ sâu đường dẫn nhỏ hơn nhiều. Tôi đã tham chiếu dự án C trong dự án A. Các tài liệu tham khảo hoạt động chính xác như mong đợi. Sau đó, tôi đã loại bỏ dự án C khỏi giải pháp, chỉ đơn thuần chuyển dự án C sang một đường dẫn sâu, giống như dự án B và thêm dự án C trở lại giải pháp và cố gắng biên dịch. Sau đó tôi không còn nhìn thấy các đối tượng C nữa.


2

Trong trường hợp của tôi, tôi đã sao chép một thư viện lớp và không thay đổi "Tên hội" trong các thuộc tính của dự án, vì vậy một DLL đã ghi đè lên ...


2

Điều này đã xảy ra với tôi trong Visual Studio 2019. Đối với tôi, tôi đã cố gắng tham khảo một dự án khác trong giải pháp của mình. Dưới đây là các bước tôi đã thực hiện trong trường hợp nó giúp được bất kỳ ai khác:

  1. Đảm bảo dự án tôi muốn tham khảo được liệt kê trong Tài liệu tham khảo
  2. Đảm bảo cả hai dự án đều sử dụng phiên bản .NET Framework chính xác
  3. Xây dựng dự án (nhấp vào mũi tên "Bắt đầu" màu xanh lá cây)

Tôi đã bối rối vì tôi vẫn nhận được lỗi sau bước 1 và 2, nhưng việc xây dựng dự án dường như đã giải quyết nó.


1

Tôi đã gặp phải vấn đề tương tự về không gian tên / phương thức không được tìm thấy trong khi thực thi mặc dù nó vẫn ổn trong quá trình biên dịch và lý do cho điều này dường như là tập hợp mà tôi đã tham chiếu đã được triển khai cho GAC và từ đó đã được thay đổi, vì vậy khi tôi tham chiếu tập hợp trong Visual Studion, nó đã sử dụng cái gần đây nhất, nhưng trong thời gian chạy, phiên bản fro GAC đã được sử dụng.


1

Trong trường hợp của tôi, tôi chỉ gặp lỗi trong VS 2015. Khi mở dự án trong VS 2017, lỗi đã biến mất.


1

Khùng. Tôi biết.

Đã thử tất cả các tùy chọn ở đây. Khởi động lại, làm sạch, kiểm tra thủ công các DLL được tạo (điều này là vô giá để hiểu nếu thực sự chính bạn đã làm rối tung lên).

Tôi đã làm cho nó hoạt động bằng cách đặt Verbosity của MSBuild thành "Chi tiết" trong Tùy chọn.


đối với tôi, đó là cấu hình xây dựng được đặt thành AnyCpu tại PlatformTarget khi Tên cấu hình là x86. Cài đặt này đã giúp tôi tìm ra nó.
Dbl

1

Câu hỏi này đã được trả lời cho poster gốc, nhưng trong trường hợp ai đó gặp phải điều này trong một dự án MS-Test:

từ trong Visual Studio, nhấp vào menu Kiểm tra -> Cài đặt kiểm tra -> Kiến trúc bộ xử lý mặc định và đảm bảo rằng kiến ​​trúc phù hợp với cấu trúc khác mà bạn đang tham khảo. Nếu hội đồng khác là x64 và cài đặt thử nghiệm của bạn là x86, bạn có thể gặp các triệu chứng mà người đăng ban đầu gặp phải.


0

Tôi đã làm việc với dự án Xamarin và như mọi khi, xóa thư mục obj và xây dựng lại đã giải quyết vấn đề của tôi, không gian tên mà VS của tôi không nhận ra là một mã trong dự án BTW của riêng tôi



0

Tôi đã có một vấn đề tương tự, đó là một chút để khắc phục sự cố, vì vậy tôi nghĩ để chia sẻ nó:

Không gian tên không thể giải quyết trong trường hợp của tôi là Company.Project.Common.Models.EF . Tôi đã thêm một tệp trong không gian tên Company.Project.BusinessLogic.Common mới .

Phần lớn các tập tin đã có một

using Company.Project;

Và sau đó tham chiếu các mô hình là Common.Models.EF . Tất cả các tập tin cũng có một

using Company.Project.BusinessLogic;

Đã thất bại vì VS không thể xác định không gian tên sẽ sử dụng.

Giải pháp là thay đổi không gian tên thứ hai thành Company.Project.BusinessLogic.CommonService


-1

Khởi động lại Visual Studio 2019 - điều đó đã làm điều đó.


Vaccano đã viết: Tôi đã thử: Khởi động lại Visual Studio
Wowork
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.