2010-01-14 2 views
38

내가 위해 윅스를 사용하기 시작하고 자동화 할 수있는 정의되지 않은 처리기 내 C# 프로젝트의 MSI의의를 작성하고 오류 "정의되지 않은 처리기 변수 '$ (var.MyProject.TargetDir)'"는 윅스 변수

을 경험하고 구축

최신 WiX v3.0.5419를 사용하고 있습니다. 내 WXS 내가 (http://blogs.msdn.com/jrock/archive/2008/01/29/complete-list-of-candle-preprocessor-variables.aspx)

<Component Id="MyId" Guid="MyGuid"> 
    <File Id="MyId" Name="MyName" KeyPath="yes" 
     Source="$(var.MyProject.TargetDir)\MyName.dll" /> 
</Component> 

내가 .wixproj에 MyProject를위한 기준을 추가 한 내가 메모장에서 그것을 열면 내가 할 수있는이 웹 페이지에 표시됩니다 전처리 변수를 사용하는 것을 시도하고 파일 내부 참조를 참조하십시오.

<ItemGroup> 
    <ProjectReference Include="..\MyProject.csproj"> 
    <Name>MyProject</Name> 
    <Project>{guid}</Project> 
    <Private>True</Private> 
    </ProjectReference> 
</ItemGroup> 

이것은 msi를 만드는 데 사용하는 내 빌드 스크립트입니다. 아마도 .wixproj가 빌드에서 사용되지 않은 프로젝트 참조를 알고 있기 때문일 수 있습니다.

<exec basedir="${tools.wix}" managed="true" program="candle.exe"> 
    <arg line='-out "${tools.wix.objfile}"' /> 
    <arg value="../MySetup.wxs" /> 
</exec> 

아무에게도 나에게이 사실을 알려 줄 수 있습니까?

답변

40

이미 언급했듯이, nant 빌드 스크립트는 wixproj 파일을 전혀 사용하지 않습니다.

당신은 여기 윅스 설치를 구축하는 두 가지 방법을 혼합하는

:

  1. 당신은 직접 candle.exelight.exe 명령 행 도구를 사용할 수 있습니다. 이 파일은 .wixproj 파일을 무시합니다. 이것은 당신이 당신의 nant 빌드 스크립트에서하고있는 것입니다. $(var.MyProject.TargetDir)과 같은 전 처리기 변수 값을 전달하려면 -dMyProject.TargetDir=c:\foo과 같은 옵션을 사용하십시오.

  2. votive (wix 용 비주얼 스튜디오 부가 기능)로 .wixproj 파일을 제작할 수 있습니다. 모든 비주얼 스튜디오 프로젝트 파일과 마찬가지로 wixproj 파일은 실제로는 msbuild.exe으로 빌드 할 수있는 msbuild 파일입니다. $(var.MyProject.TargetDir)과 같은 변수는 올바른 프로젝트 참조가있는 경우 윅스 설정을위한 msbuild 작업에 의해 자동으로 설정됩니다.

나는 당신이 <msbuild>nant task와 wixproj 파일을 빌드하는 것이 좋습니다. 이렇게하면 사용자의 nant 빌드가 Visual Studio에서 수동으로 설치 프로그램을 빌드 할 때와 동일하게 수행됩니다.

+0

대단히 감사합니다. 방금 wixproj가 msbuild 파일이라는 사실을 알았습니다. 실제로 솔루션을 구축하여 올바르게 빌드했습니다. – David

+1

빠른 헤드 업 - 옵션을 지정하는 올바른 방법은 -dMyProject.TargetDir입니다. 주요한 var. 잘못된 것입니다. http://geekswithblogs.net/Howard/archive/2009/01/20/wix-variables.aspx –

+0

@Sean : 수정 해 주셔서 감사합니다. 결정된. –