2012-06-28 3 views
1

Windows 응용 프로그램 내부에서 플러그인으로 사용할 .Net 구성 요소를 개발 중입니다. 이 플러그인은 regasm을 사용하여 클라이언트 시스템에 등록됩니다. 내 구성 요소는 대부분의 종속성을 포함하고 요청이있을 때 어셈블리를 AppDomain으로 반환합니다. 내 단일 DLL에 regasm을 실행하려고하면 폴더 내의 종속성을 찾을 수 없으므로 실패합니다. 이는 클라이언트 시스템에 구성 요소를 설치할 때 문제가됩니다.Regasm에서 임베디드 어셈블리를 찾을 수 없습니다.

regasm에게 임베디드 dll을 가져올 위치를 알려주는 방법이 있습니까? 내가 지금까지 시도했습니다 무엇

:

  1. 근처 다음 런타임 폴더에 하나의 DLL을 복사 DLL을 함께 구성 요소를 등록합니다. 내 구성 요소가 작동하고 dll이 런타임에 발견되지만 배치 옵션이 아닙니다.

  2. ComRegisterFunctionAttribute를 사용하여 연결합니다. 이것은 dll이 근처에있을 때만 호출되므로 # 1보다 좋지 않습니다.

나는 regasm이 호출 될 사실에 대해 아무런 제어권이 없습니다. 난 내 구성 요소를 하나의 DLL을 만들지 만,이 문제를 해결할 수 있다면 상당히 쉽게 배포하게됩니다.

+0

'regasm/codebase'을 사용해 보셨습니까? 그러면 COM 등록 항목 (레지스트리에 있음)에 어셈블리 파일의 경로가 저장됩니다. –

+0

나는 regasm이 불행하게도 불려지는 방법에 대한 제어권이 없다. 그러나 regasm은 내 어셈블리를 찾는 데 아무런 문제가 없다. 어셈블리에 포함 된 어셈블리를 찾을 수 없으며, 어셈블리가 어디에 있는지 묻지 않습니다. – Ld00d

+0

누구가 regasm을 부르는가? MSI 설치 프로그램? –

답변

1

새로운 답 : 나는 당신의 [ComRegisterFunction]가 다른 어셈블리 중 하나에서 유형을 참조하는 클래스의 메소드를 초과 추측하고

. 클래스 또는 메서드의 형식 중 하나에 대한 어셈블리를 찾을 수 없기 때문에 ComRegister 메서드를 JIT 컴파일 할 수 없기 때문에 코드가 실행되지 않을 수 있습니다.

외부 종속성이없는 클래스 (.net 프레임 워크 제외)를 만들고 해당 클래스에 ComRegisterFunction 특성을 넣어보십시오. 설치 작업을 수행하지만 다른 유형의 어셈블리 만 동적으로로드하므로 사용자 정의 코드를 사용하여 외부 어셈블리를 찾을 수 있습니다.

+0

그래, 내 dll이 임베디드 어셈블리를 찾는 방법입니다. 이것은 꽤 잘 작동합니다. Regasm은 그들을 찾을 수없는 사람입니다. 내 솔루션 내 임베디드 dll에 대한 참조를 제거하고 이름을 사용하여 반사를 통해 주요 하나를로드하는 것입니다 같아요. – Ld00d

+0

답변을 편집했기 때문에 제 의견이 어둡게 보입니다. 그러나 이제는 문제에 대해 더 잘 이해하고있는 것 같습니다. 거기에 당신의 대답은 내가 무슨 짓을했는지입니다 : 나는 COM 등록 dll에서 참조를 제거했습니다. 리플렉션을 통해 종속성 DLL에서 시작 프로그램을로드합니다. 이 해킹은 잘 작동합니다. 답변 해 주셔서 감사합니다. – Ld00d

-1

Ld00d, 같은 문제가있었습니다. 어떻게 했습니까? "COM 등록 된 dll에서 참조를 제거했습니다"? 나에게 마술처럼 들린다. ildasm을 사용하고 ilasm을 사용 했습니까?

나는 regasm.exe의 심각한 문제에 대한 해결책이 없다고 생각합니다.

regasm.exe는 사전 확인이 완료되면 GetReferencedAssemblies이 종료되고 [ComRegisterFunction] 메서드를 호출합니다. ildasm을 시도한 다음이 참조를 제거하기 위해 dll을 ilasm 할 수는 있지만 혼돈을 가져올 수 있다고 생각합니다. 나는 또한 당신이 코드를 ouscate한다면 어떤 일이 일어날 지 모른다.

내 해결 방법 : 설치하는 동안

  1. 은 DLL의 폴더로는 RegAsm.exe에 의해 요청하는 DLL을 복사합니다.

  2. regasm.exe가 DLL 등록을 마친 직후에 제거하십시오.

좋지 않습니다 (설치 프로그램 소프트웨어는 많은 디스크 공간을 차지하지만).

관련 문제