2011-02-09 4 views
8

VS 2010에서 WiX 3.5를 사용하고 있으며 모든 프로젝트 어셈블리를 설치 프로젝트 (.wixproj)의 참조로 추가하고 Harvest 속성을 True로 설정했습니다. 바이너리, 컨텐트 및 위성이 .msi 파일에 포함됩니다.WiX - 설치 출력의 비 프로젝트 어셈블리 수확

그러나 .msi 출력에 타사 어셈블리 (.dll)를 추가하는 방법은 무엇입니까? 각각을 명시 적으로 Product.wxs 파일에 추가해야합니까, 아니면 더 좋은 방법이 있습니까? 이상적으로, 나는 그들을 설치 프로젝트에서 파일 참조로 추가하고 싶습니다, 그러나 이것은 옵션 인 것 같지 않습니다?

답변

7

예는 (별도의 디렉토리에있는 모든 파일을 가정) 일부 WXS 파일 또는 당신이 당신을 위해이 파일을 수확 를 사용하는 빌드 전 단계를 사용할 수 있습니다 에 수동으로 추가해야합니다.

윅스의 일부이며 디렉토리 스위치를 사용하여 전체 디렉토리를 수확 할 수 있습니다. 명령 줄 인수에 따라 단일 ComponentGroup을 포함하는 별도의 wxs 파일이 생성됩니다. 이 ComponentGroup을 product.wxs에서 참조하기 만하면됩니다. 나는 현재 내 릴리즈 디렉토리 수확하는 열을 사용하는 방법에 대한 예를 들어

"../../bin/release"

열 디렉토리를 -gg -cg CG.ApplicationBinaries -DR INSTALLDIR -scom -sfrag -sreg -srd -var var.BuildOutputDir -o ApplicationBinaries.wxs

이 파일 ApplicationBinaries.wxs 생성합니다 :

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Fragment> 
     <DirectoryRef Id="INSTALLDIR"> 
      <Component Id="cmp53F90D1335DD67504EC2B9E1E8620DD3" Guid="{CA2DF1B5-7B20-4596-84A4-925B4F9BA6EC}"> 
       <File Id="filC65F9CB88694FCA79FCB3CADB9481921" KeyPath="yes" Source="$(var.BuildOutputDir)\AsyncTCPsocket.dll" /> 
      </Component> 
      .... 
     </DirectoryRef> 
    </Fragment> 
    <Fragment> 
     <ComponentGroup Id="CG.ApplicationBinaries"> 
      <ComponentRef Id="cmp53F90D1335DD67504EC2B9E1E8620DD3" /> 
      ... 
     </ComponentGroup> 
    </Fragment> 
</Wix> 
+1

고맙습니다. 명시 적으로 정의 할 것입니다. – devdigital

+0

구성 요소 그룹을 포함하는 생성 된 wxs 파일을 참조 할 수 있도록 속성을 정의하지 않아도됩니까? – KennO

+0

그런 다음 어떻게 든 $ (var.BuildOutputDir)을 Product.wxs 내의 $ (var.YOURPROJECT.TargetDir)과 같은 것으로 설정 했습니까? 그렇다면 어떻게 달성 할 수 있습니까? – jpierson

4

현재 참조 된 어셈블리를 의미 윅스 설치 프로젝트에서 사용하는 a bug in Heat이를 프로젝트의 집어 넣었다. 해결되기 전에 버전 4를 기다려야 할 것입니다.

한편, @Elmar de Koning의 답변은 아마도 현재로서는 최고 일 것입니다.