2010-01-14 68 views
38

我開始爲了使用維克斯做自動化生成創建我的C#項目的微星和我遇到的錯誤「未定義的預處理器變量‘$(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> 

我已經添加了MyProject的參考了.wixproj,如果我在記事本打開它,我可以看參考。

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

這是我用來創建msi的nant構建腳本。也許這是因爲.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創作一個.wixproj文件(wix的Visual Studio附加組件)。像所有的Visual Studio項目文件一樣,wixproj文件實際上是一個可以用msbuild.exe構建的msbuild文件。如果存在正確的項目引用,則會通過構建wix設置的msbuild任務自動設置類似$(var.MyProject.TargetDir)的變量。

我建議你建立與<msbuild>nant task的wixproj文件。這可以確保您的nant構建與從Visual Studio手動構建設置時相同。

+0

非常感謝。我剛發現wixproj是一個msbuild文件,實際上我已經通過構建我的解決方案來正確構建它! – David 2010-01-14 14:15:23

+1

就像快速向上 - 指定選項的正確方法是-dMyProject.TargetDir。領先的變種。是錯誤的。 http://geekswithblogs.net/Howard/archive/2009/01/20/wix-variables.aspx – 2011-12-21 00:22:17

+0

@肖恩:感謝您的糾正。固定。 – 2011-12-21 09:47:59