2012-07-03 3 views
-1

동일한 솔루션 내에서 개발 된 약 10 개의 중요한 DLL 파일로 구성된 솔루션이 있습니다.이 솔루션을 릴리스하면 모든 DLL 파일 (공용 클래스 및 내부 함수)이 열립니다 다른 모든 사람들에게 유용합니다. dll 파일 내부의 클래스와 함수를 동일한 솔루션에서만 표시하고 사용할 수있게하려면 어떻게해야합니까?!C에서 DLL 파일 사용이 허용되지 않습니다.

감사합니다.

+0

무엇을 시도 했습니까? 난독 화를 살펴보고, 그 이상의 것을 얻지는 못할 것입니다. DLL은 항상 디 컴파일 될 수 있습니다. – CodeCaster

답변

1

귀하의 질문에 저는 사전에 (즉, 컴파일 타임에) 어떤 어셈블리가 함께 배송되는지 알고 있습니다. 당신이 internal로 유형을 표시 한 어셈블리에 모든 코드를 배포

  • 다음 중 하나를

    따라서, 두 가지 솔루션이 있습니다. 모든 조립품을 함께 운송하는 것으로 보이므로 (라이센스 문제 제외)을 배송하기 전에 모든 조립품을 하나의 조립품으로 결합하지 않아야하는 필연적 인 이유는 없습니다.
    그렇게 할 수 있다면, 모든 프로젝트를 별도의 프로젝트로 개발하고 일부 빌드 도구를 사용하여 모든 코드를 포함하는 우산 프로젝트 파일을 만들 수 있습니다.

  • 또는 유형을 internal으로하고 솔루션의 다른 어셈블리를 친구로 선언하십시오.
    내부 형식이 솔루션의 다른 어셈블리에 표시되어야하는 어셈블리에 InternalsVisibleToAttribute을 선언하십시오. 나는 누군가가 당신의 API에 대해 코딩 할 수 어셈블리를 참조 할 수 있도록, 컴파일러에 "볼 수"의 의미에서 "볼 수"해석 한

참고. 어떤 식 으로든 코드가 실제로 보이지 않게하려면 CodeCaster의 설명에 나와있는 것처럼 난독 화를 사용해야하며, 심지어 깨지기 쉽지 않을 수도 있습니다.

+0

어떤 식 으로든 컴파일 후 다른 어셈블리에서 사용할 수없는 모든 어셈블리 (dll 파일)를 가질 수 있습니까? – Moh

+0

@MOLi : 방금 위의 답변을했다고 생각합니다 (두 번째 목록 항목). 명확하지 않은 점을 알려주십시오. –

+0

죄송합니다. 조금 바빴습니다. 위에서 언급 한 내용을 테스트하고 그 결과를 알려 드리겠습니다. 미리 감사드립니다. – Moh

0

strong-name all your assemblies 수 있습니다. 그런 다음 public 메서드가 호출되거나 클래스가 인스턴스화 될 때 Assembly.GetCallingAssembly()을 통해 호출 어셈블리를 가져 와서 강력한 이름을 확인한 다음 일치하지 않으면 예외를 throw합니다. 그러나 모든 예외의 성능에 대해서는 확실하지 않습니다. 그것이 내가 생각할 수있는 전부입니다. 모든 것을 하나의 어셈블리에 집어 넣고 내부로 만드는 것입니다.

관련 문제