2010-03-26 3 views
8

InstallSheild를 사용하여 GAC에 여러 어셈블리를 등록해야하며 INSTALLDIR에도 어셈블리를 복사해야합니다. 가장 좋은 방법은 무엇입니까? 또한 어셈블리에 대해 regasm.exe를 호출해야합니다. InstallShield를 사용하여이 작업을 수행 할 수 있습니까?InstallShield를 사용하여 GAC에 어셈블리 등록

GAC에 등록해야하는 각 어셈블리마다 새로운 '구성 요소'가 정말 필요합니까?

답변

10

이 대답은 사용자가 Windows Installer 프로젝트 유형을 사용한다고 가정합니다.

1) 각 DLL 파일의 구성 요소를 만들어 키 파일로 만들고 대상 폴더를 GlobalAssemblyCache로 설정합니다. 이 명령은 Windows Installer가 MsiPublishAssemblies 표준 작업을 사용하도록 지시합니다. MsiPublishAssemblies 표준 작업은 Fusion을 호출하여 어셈블리를 GAC에 등록합니다. 이것은 효과적으로 GACUTIL이 당신을 위해하는 일입니다. 기억하십시오 : GACUTIL은 재배포 할 수 없습니다. 어셈블리에 컴패니언 파일이있는 경우 컴패니언 파일로 동일한 컴 포넌트에 추가하십시오.

2) 어셈블리가 ComVisible이면 각 DLL에 대한 구성 요소를 만들어 키 파일로 표시하고 .NET ComInterop을 true로 설정하십시오. 이로 인해 빌드시 COM 정보가 추출되고 MsiPublishAssemblies 표준 작업을 사용하여 레지스트리에 정보를 기록하도록 Windows Installer에 알립니다. 참고 : 어셈블리의 등록 섹션에 사용자 지정 사용자 코드가 있으면 캡처되지 않습니다. 이것은 regasm /regfile이 코드 경로를 실행하지 않는다는 MSDN에 있습니다. 해당 정보를 InstallShield의 해당 레지스트리 뷰에 수동으로 입력해야합니다.

3) 예, 전체적으로 및/또는 개인적으로 강력한 이름의 어셈블리를 배포 할 수 있습니다. 사적인 것이 보일지 여부는 참조를 가진 어셈블리가 UseSpecific을 가지고 있는지 아닌지에 달려있다.

+0

내 기억을 조깅하기 좋은 사람 Chris! –

0

예. 시스템이 신경 쓰는 한 두 개의 다른 파일입니다. AFAIK, 당신은 GAC에 파일을 가질 수없고 대상 컴퓨터의 임의의 폴더에 동시에 있어야합니다.

이론적으로 GAC에 있으면 제품 디렉토리에 필요하지 않습니다. GAC에 있으면로드 된 버전이 제품 디렉토리에있는 버전이 아닙니다. 그러나 COM interop에 대해서도 등록해야한다면 어렵게됩니다. 나는 틀릴 수도 있지만, 시도했을 때 나는 둘 다 가지고 있어야했다 : 하나는 디렉토리에, 하나는 GAC에있다.

하지만 실제로 제품 디렉토리에 GAC가 필요하지는 않습니다. 언제 어디서나 어떤 프로그램에서로드 되더라도 GAC는 적절한 위치에 있습니다. COM Interop의 GAC에 넣는다면 불필요합니다. 설치되어있는 폴더를 지정하여 등록하면 올바르게 설치 한 실드가있는 경우 제대로 작동합니다.

+0

나는 C#에서 Windows 도구 모음을 개발했습니다. 이 경우 dll은 GAC에 있어야합니다. 맞습니까? – Cornel

+0

반드시 그렇지는 않습니다. 도구 모음의 사용자가 응용 프로그램에서 해당 도구 모음을 사용하는 경우 응용 프로그램의 폴더에서만 필요합니다. –

관련 문제