2009-11-19 15 views
3

.NET 2.0, C#, Windows Forms 개발, 엔터프라이즈 라이브러리 3.1 사용.C# .NET 네임 스페이스 이름이 네임 스페이스 오류에 없습니다. 로컬 네임 스페이스 지시문을 벗어난 경우에만 - 왜?

프로젝트 네임 스페이스가 있습니다 (Project라고 함). 또한 Project.Namespace1, Project.Namespace2 등과 같이 프로젝트 내에 몇 개의 하위 네임 스페이스가 있습니다.

한 클래스에서 Enterprise Library Logging 블록과 함께 사용할 enums 등을 정의합니다.

namespace Project.Logging 
{ 
    public static class Logging 
    { 
    public enum LogPriority 
    { 
     // enum values here 
    } 
    } 
} 

또 다른 클래스에서는 using 문을 선언해야하므로 enum 값을 사용합니다. 동일한 프로젝트이므로 참조 할 어셈블리가 없습니다. 맞습니까? 내가 로컬 네임 스페이스의 사용하여 내부를 선언하면

는 다음과 같이 그것을 잘 작동합니다 : I 로컬 네임 스페이스 선언 외부에서 사용하여 문을 넣으면

namespace Project.SomeName 
{ 
    using Project.Logging; 

    // code referencing the Logging enum 
} 

그러나, 나는 "유형을 얻거나 누군가가 전에이를 통해 실행 된

using Project.Logging; 

namespace Project.SomeName 
{ 
    // code referencing the Logging.LogPriority.whatever 
} 

은 왜이다

+0

두 경우 모두 LogPriority 열거 형을 참조하는 코드를 게시 할 수 있습니까?정의 된 열거 형은 클래스 내부에 있으며 & nbsp 이는 문제가 될 수 있다고 생각합니다. – shahkalpesh

답변

2

네임 스페이스와 이름이 같은 클래스를 사용하기 전에 비슷한 문제가 있지만 비슷한 문제가 발생했습니다.

이상하게도 일부 개발자의 PC에서는 괜찮은 것처럼 보였지만 이상하게는 보이지 않았습니다. 결국에는 네임 스페이스에 같은 이름의 클래스가 포함되지 않았 음을 확인했습니다.

namespace Project.Logging 
{ 
    public static class Logging // this is what caused the probems for me 
    { 

    } 
} 
+0

이것은 확실히 볼거리입니다. 그것은 여기서 문제가되는 것 같지 않지만 언젠가 나중에 진짜 문제를 일으킬 수 있습니다. – DaveN59

+0

기본적으로 클래스의 이름을 네임 스페이스와 동일한 이름으로 지정하지 않으면 문제가 해결됩니다. – Timwi

1

예를 : 네임 스페이스 이름 'LogPriority는'네임 스페이스 'Project.Logging'...이처럼 존재하지 않는 이유는 무엇입니까? s 일 가능성이 높습니다. 프로젝트 속성의 "기본 네임 스페이스"에 대해 비정상적인 값을 설정했을 가능성이 큽니다. 나는 프로젝트 구성을 검증 할 것이다.

+0

기본 네임 스페이스는 'Project'입니다 (이전에 게시 한 예에 이어). 그래도 좋은 생각입니다. – DaveN59

+0

누구가 합법적 인 답변을 downvotes? – thumbmunkeys

-1

네임 스페이스의 내부 또는 외부에서 사용하면 확실히 달라질 수 있습니다. 좋은 토론 here이 있으며 기본 네임 스페이스 설정과 관련이 있습니다.

+0

그 글은 제가 찾고있는 것입니다. 우리는 또한 StyleCop을 사용하고 있으며, 그것에 대해 불평하고있었습니다. 이 공연을 시작하기 전에는 StylecCop에 대해 들어 본 적이 없으므로 사용법을 네임 스페이스 안에 넣지는 못했습니다. – DaveN59

+0

이 답변은 원래 문제가 네임 스페이스와 같은 이름을 가진 클래스로 인해 발생했다고 언급하지 않았습니다. – Timwi

0

이전에이 문제가 발생하여 모두 네임 스페이스와 클래스 이름의 모호한 이름 지정이되었습니다. 우리가 Services.Web.xxx 우리의 공간을 가지고 있고 또한 당신은 우리가 다 퉜다 문제를 상상할 수 Services.Web.xxx 명명 된 어셈블리에 대한 참조를 Services.Web.xxxx으로 서비스 참조를 추가하며 추가하려고

.

: 결국

우리가 단순히 이름 바꾸기 또한

는 다음 작업을 수행 할 수있는 Services 접두사 하나 개의 인스턴스 만 있다는 것을 확인하고 LogEnum에 LogPriority 별칭을 만들 않았다 그것을 해결하기 위해

using LogEnum= Project.Logging.Logging.LogPriority; 

namespace Project.SomeName 
{ 
    internal class MyClass 
    { 
     public MyClass() 
     { 
      LogEnum enum1 = LogEnum.None; 
     } 
    } 
} 
namespace Project.Logging 
{ 
    public static class Logging 
    { 
     public enum LogPriority 
     { 
      None, 
      Default 
     } 
    } 
} 
2

유선 오류가 발생했습니다. 다른 어셈블리에서 오는 네임 스페이스를 찾을 수 없지만 어셈블리 이름을 실행하는 것으로 시작합니다. 마지막으로 .NET Framework 클라이언트 프로필에 대상 프레임 워크를 설정했음을 알았습니다.