2013-07-29 5 views
1

C#으로 작성된 어셈블리가 있습니다. 그 안에는 정적 함수가있는 정적 클래스가 많이 있습니다. 다른 C# 프로젝트에서이 함수를 참조하는 것은 잘 작동하지만 VB.NET 프로젝트에서이 함수를 사용하려고하면 클래스를 사용할 수 없거나 볼 수 없습니다. 모두, 그들이 객체 브라우저에 나타나더라도, 프로젝트는 내가 언급 한 클래스를 참조하지 않는 한 컴파일되고 실행될 것입니다.VB에서 C# 어셈블리의 클래스를 볼 수 없습니다

'MyTools' is not declared. It may be inaccessible due to its protection level. 

시도가를 사용하려면 여기

내가

namespace Tools 
{ 
    public static class MyTools 
    { 
     public static int SumNumber(int n1, int n2) { return n1 + n2; } 
    } 
} 

는 오류가 발생합니다 VB에서 클래스를 사용하려고 ... 예를 들어, C#에서 클래스를 정의하는 방법입니다 정규화 된 이름 'Tools.MyTools.SumNumber ....'는 똑같은 오류 메시지를 나타냅니다.

나는 C# 어셈블리와 VB 프로젝트 모두 .NET 4.5를 타겟팅하고 있는지 확인했습니다. 여기에 무엇이 누락 되었습니까?

+3

수업을 사용하려고하면 * 정확하게 * 발생합니까? 그리고 네임 스페이스는 무엇입니까? –

+0

이름이 선언되지 않았다는 오류 메시지가 나타납니다. 이를 반영하기 위해 질문을 업데이트했습니다. –

+0

짧지 만 완전한 예제 (C# 코드와이 코드에 액세스하는 VB 코드 모두)를 사용할 수 있습니까? 이건 정말 잘 작동합니다. 같은 이름의 비공개 클래스가있는 다른 참조가 없습니다. –

답변

1

프로젝트 속성에서 '루트 네임 스페이스'옵션을 지웠고 이제는 모든 것이 잘 작동합니다. 이를 그대로두면 프로그래머를 혼란스럽게하는 명확하지 않은 네임 스페이스 중첩이 발생합니다.

+1

흠, 아니, 단지 혼란 스러웠다. 다음 번에 개체 브라우저를 사용하십시오. –

+0

Duly는주의하고 업데이트했습니다. –

+0

내 대답을 옳은 것으로 표시하지 않겠습니까? –

0

이 문제는 일반적으로 클래스를 사용하려고 할 때 적절한 네임 스페이스를 사용하지 않아 발생합니다. C# 코드에서 전체 네임 스페이스를 가져온 다음 해당 네임 스페이스를 사용하여 VB에서 호출 할 때 클래스 이름을 완전히 한정합니다. 작동하는 경우 프로젝트 또는 파일 수준에서 해당 네임 스페이스를 가져 오거나보다 쉽게 ​​액세스 할 수 있도록 네임 스페이스를 다시 작성해야합니다.

여전히 작동하지 않는 경우 VB 프로젝트의 C# 프로젝트에 대한 적절한 참조가 있는지 확인하십시오. 실수로 출력 dll 또는 다른 오래된 파일의 복사본을 참조하지 않았는지 확인하십시오.

+0

질문에서 말했듯이 정규화 된 네임 스페이스를 사용하면 작동하지 않습니다. –

관련 문제