본문 바로가기

C#

C# InternalsVisibleTo로 어셈블리 간 접근 제어

C#에서는 기본적으로 internal 접근 제한자가 붙은 멤버는 같은 어셈블리 내에서만 접근할 수 있습니다. 하지만 특정 어셈블리 간에 internal 멤버를 공유하고 싶을 때 InternalsVisibleTo 특성을 사용할 수 있습니다.

1. InternalsVisibleTo란?

InternalsVisibleTo는 어셈블리의 internal 멤버를 다른 지정된 어셈블리에게 공개하도록 허용하는 특성입니다. 주로 테스트 프로젝트에서 내부 멤버를 접근해야 할 때 많이 사용됩니다.

2. 사용법

원하는 어셈블리의 AssemblyInfo.cs나 프로젝트 내 어디서든 아래와 같이 선언합니다.

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("FriendAssemblyName")];

여기서 "FriendAssemblyName"은 internal 멤버에 접근할 수 있게 허용할 어셈블리 이름입니다.

3. 참고사항

  • Strong-named 어셈블리인 경우, FriendAssembly도 strong-name 정보를 함께 명시해야 합니다.
  • 디버깅 및 테스트 목적 이외에는 내부 접근을 지나치게 공개하지 않는 것이 좋습니다.

4. 예제

// AssemblyInfo.cs 에 추가
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("MyProject.Tests")]

// MyClass.cs
internal class MyClass
{
    internal void InternalMethod()
    {
        // 내부 메서드
    }
}

// MyProject.Tests에서 MyClass.InternalMethod 사용 가능