2009-06-02 4 views
5

의 네임 스페이스가있는 .NET 3.5 C# 프로젝트가 있습니다. 나는 다음과 같은 경고 얻을 내 프로젝트에 "Samplenamespace.Utils.Example"라는 어셈블리를 추가하는 경우참조 이름 대/소문자가 CLS와 일치하지 않습니다.

는 :

식별자 'Samplenamespace'는 경우에만 다른를 CLS 규격

아니다

Samplenamespace에 소문자 'n'이 있음에 유의하십시오.

현재 프로젝트에서 참조 어셈블리를 사용하고 있지 않습니다. 참조로 추가하기 만하면 경고가 표시됩니다.

컴파일러가 공용 클래스에서 어셈블리에 대한 참조를 노출하지 않는 이유에 대해 불평하는 이유는 무엇입니까?

해결 방법은 없나요?

답변

7

같은 네임 스페이스가 혼합되어있는 경우 모든 .NET 언어에서 대/소문자를 구분하지는 않습니다 (예 : VB). 다른 경우에는 코드에서 다른 개발자가 액세스하지 못할 수도 있습니다. 이 솔루션 내에서 유형을 소비 할 수 그것은 단순히 모든 언어 때문에 당신을 경고하고 (내 가게에서 우리가 오류로 처리) 경고

+0

감사합니다. Ralph, 내 프로젝트가 참조 된 어셈블리를 잠재적 인 VB 클라이언트에 노출시키지 않아서이 문제가 왜 중요한지 이해할 수 없습니다. 내가 효과적으로 기본 어셈블리에서 VB 클라이언트를 추상 해요? – user115909

+0

VB에서는 대/소문자를 구분하지 않으므로 SampleNamespace.A와 Samplenamespace.A를 구별 할 수 없으므로 호출 할 형식을 결정할 수 없습니다. 이러한 모호성을 방지하기 위해 C# 컴파일러는이 문제를 플래그로 지정하여 모호성없이 모든 사람이 호출 할 수있는 형식과 멤버 만 만들 수 있습니다. – Gishu

+0

제 생각에는, 맹목적인 체크 - 앤 - 플랙 (flag-check-and-flag)입니다. 실제로 타입을 사용하거나 노출하는 방법을 고려하지 않았습니다. – Gishu

2

왜 당신의 경우,하지 않을 수 있습니다

것 차이점을 알고 있어야합니다 (유형을 사용하지 못할 수도 있음). 확실하지 나는 그것이 비록 좋은 생각

[assembly:CLSCompliant(false)] 

을 :

나는 당신이 (read more here) (AssemblyInfo.cs 파일에) 비 CLS 규격 인 것으로 어셈블리를 표시하여이 경고를 피할 수 있다고 생각 ...

업데이트 : 공개적으로 노출되지는 않지만 경고가 발행되는 이유는 네임 스페이스에 액세스 한정자가 없다는 것입니다. 네임 스페이스는 항상 공개적이라고 말할 수 있으므로 은 공개 유형을 포함하지 않을 수도 있지만은 잠재 고객에게 노출됩니다.

+0

Fredrik, 나는 CLS 호환 코드를 만들 수는 없지만 차라리 내 응용 프로그램의 클라이언트 코드를 고려하지 않는 것이이 어셈블리에 노출되어 있지 않습니다. CLS 준수를 깨뜨리는 것은 타당한 상황이 아닌 것 같습니다. – user115909

+0

나는 호기심을 가지고 있고 몇몇 시험을했다; 대답에서 내 업데이 트를 참조하십시오. –

+0

그건 프레드릭 이후. 내 유일한 옵션은 네임 스페이스를 변경하거나 CLS 준수를 false로 설정하는 것입니다. 도와 주셔서 감사합니다 – user115909

관련 문제