카테고리 보관물: C#

C#

네임 스페이스가 인식되지 않습니다 (있는 경우에도) AutoMapper를 사용하고

이 오류가 발생합니다.

유형 또는 네임 스페이스 이름 ‘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. (즉, using 문없이 참조 AutoMapper.Mapper.CreateMap)
  3. 청소 및 재건

다른 아이디어가 있습니까?



답변

프로젝트가 .NET Framework 4 Client Profile을 사용하도록 설정되어 있지 않은지 확인하십시오.

솔루션이 아닌 프로젝트를 마우스 오른쪽 단추로 클릭하여 특성을 확인 / 변경하고 특성 -> 응용 프로그램 -> 대상 프레임 워크를 선택하십시오 . 대상 프레임 워크는 해당 페이지의 드롭 다운입니다.

이것은 Visual Studio의 문제입니다 (버그라고 부르기까지합니다). AutoMapper에는 .NET Framework 4 Client Profile에서 제외 된 어셈블리가 필요합니다. 프로젝트가 해당 버전의 프레임 워크를 사용하고 있기 때문에 중단됩니다.

참조하는 프로젝트의 .NET Framework 버전이 참조하는 프로젝트보다 높은 경우 유사한 오류가 빌드 프로세스로 전파됩니다. 즉, 프로젝트 타겟팅 4.5.1을 참조하는 4.5를 대상으로하는 프로젝트에서도 이와 동일한 오류가 발생합니다.

오류 메시지가 명확하게 참조한 어셈블리를 참조하도록 지시 할 때 빌드되지 않는 이유에 대한 합리적인 설명이 없기 때문에 이러한 상황이 발생하면 더 나은 오류 메시지가 필요합니다.


답변

바보 같은 질문을하겠습니다 : automapper.dll 파일 이 두 개있을 수 있습니까? 하나는 AutoMapper네임 스페이스가 있고 다른 하나는 없는가? 두 프로젝트의 경로를 확인하십시오.

또한 using명령 순서 가 다르다는 것을 알았습니다 . 중요하지 않지만 셔플을 시도 했습니까?


답변

클래스가 컴파일되지 않으면 프로젝트에 있더라도 다음을 확인하십시오.

  1. 클래스 이름이 정확히 같은지 여부
  2. 네임 스페이스가 정확히 같은지 여부
  3. 클래스 속성이 빌드 조치를 표시하는지 여부 = 컴파일

답변

다른 모든 답변이 도움이되지 않으면 가장 간단한 솔루션이어야합니다.

나는 대답 중 내 설정에 어떤 문제가 있는지 찾고 있었고, 모두 시도했지만 아무것도 작동하지 않았으며 Visual Studio 2018Microsoft에 의해 개발 되었음을 깨달았습니다 . 그래서 저는 대부분의 사람들이하는 일을했습니다.

Visual Studio를 다시 시작
했으며 작동했습니다.


답변

파일이 들어있는 폴더 를 마우스 오른쪽 버튼으로 클릭하고 프로젝트에서 제외 를 선택한 다음 마우스 오른쪽 버튼을 다시 클릭하고 프로젝트에 포함을 선택 하여이 문제를 해결했습니다 (먼저 제외 된 폴더를 표시하려면 모든 파일 표시 를 활성화해야 함 )


답변

VS2010에서 인식되지 않는 참조와 비슷한 문제가 있으며 여기의 답변으로 수정할 수 없습니다.

내 솔루션의 문제는 참조 된 프로젝트가있는 경로의 확장과 관련이 있습니다. SVN을 사용하면서 일부 테스트를 수행하기 위해 저장소의 분기를 만들었고 해당 분기는 경로 구조에서 두 레벨을 증가 시켰으므로 경로가 너무 길어서 창에서 사용할 수 없었습니다. 이것은 오류를 발생시키지 않았지만 프로젝트 참조의 네임 스페이스를 인식하지 못했습니다. 경로가 더 작도록 프로젝트 위치를 수정하면 모든 것이 잘되었습니다.


답변

필자의 경우 참조 된 dll은 더 높은 버전의 .Net Framework에서 빌드되었습니다. 참조를 추가 한 후 사용할 수 있습니다. 그러나 빌드를하자마자 ‘missing reference’오류가 나타납니다. dll을 새로 고치면 오류가 발생하지만 절대 빌드되지 않습니다. 이 게시물을 통해 프레임 워크 버전을 확인 했으므로 참조 된 프로젝트를 동일한 버전으로 빌드하여 해결할 수 있습니다.