2009-02-07 4 views
2

내 프로젝트 중 하나는 런타임에 일부 클래스를 생성해야하고 Reflection.Emit을 사용하는 것이 매우 간단하다고 생각했지만 메소드를 호출하는 생성 된 코드를 실행할 때 MemberAccessExceptions가 표시됩니다 발전기 어셈블리 내부에 표시되어 있습니다. 동적 어셈블리가 직접 내 코드에 액세스 할 수 있어야한다는 것을 런타임에 알리는 방법이 있습니까? 나는 정말로 내 도서관의 소비자에게 공개적으로 공개하지 않을 것입니다. Reflection.Emit 어셈블리에서 생성 어셈블리의 내부 멤버에 액세스하도록하려면 어떻게해야합니까?


InternalsVisibleTo에 대해서는 동적으로 생성 된 어셈블리의 경우에 어떻게 사용할지 확신 할 수 없습니다. 이것은 가능한가?

+0

InternalsVisibleTo를 사용해 보셨습니까? – tuinstoel

답변

3

InternalsVisibleTo 다른 사람들에게 어셈블리를 열어서 작동합니다. 생성 된 유형에서 어셈블리 Foo을 사용하려는 경우 Foo의 경우 AssemblyInfo.cs에 생성 된 어셈블리의 이름을 지정해야합니다.

AssemblyBuilder 클래스를 사용하여 새 어셈블리를 내보내는 경우 생성 된 어셈블리의 이름을 지정할 수 있습니다. 이 이름은 어셈블리의 InternalsVisibleTo 속성에 사용 된 이름과 일치해야합니다.

0

생성 어셈블리의 멤버가 내부로 표시된다는 사실에 이유가 있다고 가정합니다.

공용 메서드에서 필요한 기능을 노출하거나 InternalsVisibleTo (주석 섹션에 언급 된 @tuinstoel) 또는 Reflection (리플렉션을 사용하여 다른 어셈블리의 비 public 멤버에 액세스 할 수 있음) .

+0

동적으로 생성 된 어셈블리의 경우 어떻게 사용할지 확신 할 수 없습니다. 이것은 가능한가? –

관련 문제