문제

나는 C#에 클래스-라이브러리 (예 : BHO)를 쓰고 있으며 현재 Regasm의 생성 된 레지스트리 키에서 나오는 정크 출력이라고 생각하는 많은 양으로 랭킹하고 있습니다.

짧은 버전은 이것입니다. 나는 소수의 클래스 (현재 : 한 클래스)를 IE (및 나머지 COM)에만 노출시키고 싶습니다. 하나의 클래스 만 ClassinterFaceatTribute 및 Guid Stuff Set 세트를 갖추고 있으며, 애드온에는이 클래스의 COM 레지스트리 키만 필요하지만 Regasm은 전체 프로젝트의 모든 클래스에 대한 GUID 및 레지스트리 키를 생성합니다.

클래스 이름이 절대적으로 사용자 레지스트리에 앉아있는 것을 원하지 않기 때문에 이것은 성가신 것입니다. 가지다 거기에.

공정하게 말하면, 다른 클래스 중 상당수는 동일한 솔루션의 다른 프로젝트의 드라이버 앱에서 IE의 디버깅 블랙홀을 둘러싼 드라이버 앱에서 사용하기 때문에 공개됩니다.

나는 여전히 COM에 대해 여전히 매우 녹색 (특히 .NET과 관련하여)이 다른 모든 클래스를 Regasm에서 숨길 수있는 가장 좋은 방법이 무엇인지 궁금했습니다. 아니면 적어도, 그들이 공개적으로 표시되어 있지만이 클래스가 내가 그들을 위해 COM 플래그를 설정하지 않았을 때 나타나는 이유는 무엇입니까?

감사!

도움이 되었습니까?

해결책

사용 internal 가질 필요가없는 물건에 대한 수정 자에 액세스하십시오 public 수정 자. 실제로 필요한 것들을 위해 public 액세스 Comvisible 속성을 사용하여 부분적으로 숨기십시오.

예를 들어:

[ComVisible(false)]
public class ClassToHide {
    //whatever
};

public class ClassToExpose {

     public void MethodToExpose() {}

     [ComVisible(false)]
     public void MethodToHide() {}
};

모든 공개 클래스의 모든 공개 회원 기능 및 회원 변수는 기본적으로 볼 수 있습니다. 따라서 먼저 그것들을 내부로 만들고 실제로 필요하다면 공개적으로 comvisible로 com에서 숨기십시오.

다른 팁

/regfile 스위치를 사용해보십시오 - 모든 클래스 이름을 레지스트리에 직접 작성하는 대신 reg 파일을 출력합니다.

.reg 파일이 있으면 대상 시스템 레지스트리에 추가하지 않으려는 항목을 제거하고 해당 값 만 대상 시스템에 배포 할 수 있습니다. 소프트웨어를 배포하는 방법에 따라 더 쉬울 수 있으며 유형의 코드를 변경할 필요가 없습니다.

실제로 Sourcecode에 액세스 할 수 없다면 이것이이를 달성하는 유일한 방법 일 것입니다.

나는 같은 문제를 가진 com 구성 요소를 썼습니다.

모든 비 콤 함수를 별도의 도우미 DLL로 분리했습니다. com dll에는 등록 해야하는 코드 만 포함되어 있습니다. 다른 모든 것은 도우미 DLL을 통해 액세스합니다.

미래 코드가 실수로 표시되지 않도록하기 쉬운 방법이 public 보다는 internal 레지스트리에 나타납니다.

comvisible 속성을 AssemblyInfo 파일에서 false로 설정하고 원하는 클래스에 대해서만 comvisible을 적용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top