2013-03-26 4 views
7

우리 회사는 최근 Wix Toolset (v.4.0.12)을 사용하도록 강요했습니다. 왜냐하면 불행하게도 더 이상 설치 프로그램 프로젝트가 포함되지 않은 Visual Studio 2012로 업그레이드했기 때문입니다.WIX Tools 세트가 VS 2012 초급 문제로 통합되었습니다.

내 문제는 다음과 같습니다. 나는 모든 프로젝트에서 exe 파일과 여러 dll을 생성하는 많은 프로젝트와 함께 큰 솔루션을 가지고있다.

그런 다음 솔루션에서 Wix 설정 프로젝트를 만들고 exe 파일을 생성하는 프로젝트에 대한 참조를 추가하십시오. 해당 프로젝트 참조의 속성에서 Harvest: trueProject Output Groups: Binaries을 설정했습니다.

필자는 WiX 프로젝트를 빌드하여 참조 된 프로젝트의 종속성을 확보 할 것으로 기대하므로 수동으로 참조를 추가 할 필요가 없으므로 유지 관리가 더 필요합니다.

또한 참조 된 프로젝트 파일에서 heat.exe을 실행하면 프로젝트가 의존하는 DLL이 아닌 파일의 exe 출력 만받습니다.

나는 위의 내용이 꽤 표준적인 것으로 가정하고, wix 도구는 저를 위해 그 정보를 수집 할 수 있어야합니다. 그리고 그물에 대한 방대한 검색을 한 후에 비슷한 이슈를 가진 사람을 찾을 수없는 이유가 궁금합니다.

위의 이유를 아는 분이라면 WiX로 작업하는 방법에 대한 기본 자습서를 보내주십시오. 내가 적합한 것을 찾지 못하는 것 같습니다.

답변

8

WiX v3.6 이상에서는 VS2012를 지원합니다. WiX v4.0은 간신히 시작되었으며 현재는 사용하지 않는 것이 좋습니다. v4.0에서 제공되는 많은 변경 사항이 현재 v3.x 라인을 고수하고 있습니다.

봉헌 (Votive)의 자동 수확 기능이 완전히 작동하지 않습니다. 이것이 기본적으로 비활성화되어있는 이유입니다. 많은 프로젝트 유형이이를 깨뜨린 것으로 나타났습니다. 발견 한대로 수확은 여러 프로젝트 참조를 거치지 않습니다. 제대로 작동하기 위해서는 더 많은 일을해야하는 모든 일이 필요합니다.

그동안 File 개 요소를 Component 개 요소로 나열 할 수 있습니다.

+0

수확 출력을위한 MSBuild 작업이 있습니까? 내 생각에, 어딘가에있는 그물을 보았지만 지금은 찾을 수 없습니다. –

2

아직 평평하지 않은 v4.0.12의 사용 방법을 잘 모르는 경우! :) Wix v3.8은 최신 버전 : http://wixtoolset.org/releases입니다.

official documentation에는 많은 가이드가 있으며 tutorial에서 많은 정보를 찾을 수도 있습니다.

그러나 특정 경우에 당신은 아직 지원되지 않습니다 수동으로 자동 수확 등의 설치로 각 프로젝트의 출력과 의존성을 포함해야합니다

<Component> 
    <File Id="ProjectA.Output" 
      Name="$(var.ProjectA.TargetFileName)" 
      Source="$(var.ProjectA.TargetPath)" 
      KeyPath="yes" /> 
</Component> 

<Component> 
    <File Id="ProjectA.NlogDependancy" 
      Name="NLog.dll" 
      Source="$(var.ProjectA.TargetDir)\Nlog.dll" 
      KeyPath="yes" /> 
</Component> 

<Component> 
    <File Id="ProjectB.Output" 
      Name="$(var.ProjectB.TargetFileName)" 
      Source="$(var.ProjectB.TargetPath)" 
      KeyPath="yes" /> 
</Component> 

<Component> 
    <File Id="ProjectB.AutofacDependancy" 
      Name="Autofac.dll" 
      Source="$(var.ProjectB.TargetDir)\Autofac.dll" 
      KeyPath="yes" /> 
</Component> 

이가 그 정말 열심히하지 않습니다 수백 개의 바이너리가 없으면 너무 오래 걸리지 않을 것입니다.

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 웃기는 버전 4.0.12는 나와 있지 않지만 http://wixtoolset.org/releases/v4.0.12.0에서 가져 왔습니다. 아마도 여전히 베타 버전이지만 아마도 Visual Studio 2012에 통합 된 유일한 버전 일 것입니다. 필자는 내 문제에 대해 많이 읽었으며 heat.exe가 프로젝트의 종속성을 실행한다고 생각했지만 불행히도 그런 일은 발생하지 않았습니다. 다른 설치 프로그램을 선택해야하는지 알게 될 것입니다. 다시 한 번 감사드립니다 –

+0

WiX 3.7은 또한 VS2012와 통합됩니다. 그러나이 대답은 여전히 ​​필요합니다. –

1

내 솔루션의 .msi 설치를 만들 때 비슷한 문제가 발생했습니다.

이 문제를 극복하고 새로운 .dll 및 기타 종속성을 프로젝트에 삽입하고 자동으로 만들 때도 오랜 기간 지속되도록하려면 다음을 수행하십시오.

내 제품 내.-> 이벤트를 빌드 - WXS 나는이 "디렉토리"

<!--Here We Install Our Main App--> 
<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramFilesFolder"> 
    <Directory Id="INSTALLFOLDER" Name="MyAppDir"/> 
    </Directory> 
... 
</Directory> 

내 윅스 프로젝트 -> 속성

이> 사전 이벤트 명령 줄을 구축,이 명령을 추가 :

"%wix%\bin\heat" dir "$(SolutionDir)MainProject\bin\Debug" -dr INSTALLFOLDER -scom -frag -srd -sreg -gg -cg Components -var var.MainProject.TargetDir -o $(SolutionDir)MainProject\Includedheat.wxs 

내가 빌드하면 내 wix 프로젝트에서 MainProject \ bin \ Debug 디렉토리의 모든 파일을 나열하는 MainProject 디렉토리에 Includedheat.wxs 파일을 만듭니다.

다음 단계는 - 내 기능 섹션에서 내가 추가보다는 윅스 프로젝트에 Includedheat.wxs를 추가 : 지금

<!--Add Component--> 
<Feature Id="MainApplication" Title="Main Application" Level="1"> 
... 
<ComponentGroupRef Id="Components" /> 
</Feature> 

을 내 MainProject에 거주 모든 콘텐츠를 다시 작성의 .msi를 설치하면 \ bin \ Debug 디렉토리는 대상 위치의 MyAppDir 디렉토리에도 포함됩니다. 좀 더 자세한 내용은

: 나는이 가이드를 따라 :

Create a working Wix project.

Easy way heat.exe.

는 또한 flags이 명령에서 사용하는 것을 detrming에 대한 읽기 recomending.