我开始使用WiX来进行自动化构建以创建我的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>
我已将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>
有人可以启发我吗?
最佳答案
如前所述,您的nant构建脚本根本没有使用wixproj
文件。
您在这里混合了两种不同的方式来构建wix设置:
candle.exe
和light.exe
命令行工具。这将忽略.wixproj
文件。这就是您在nant构建脚本中所做的事情。要传递诸如$(var.MyProject.TargetDir)
之类的预处理器变量的值,请使用诸如-dMyProject.TargetDir=c:\foo
之类的选项。 msbuild.exe
进行构建。如果存在正确的项目引用,则msbuild任务会自动设置$(var.MyProject.TargetDir)
之类的变量,以构建wix设置。 我建议您使用
<msbuild>
nant task构建wixproj文件。这样可以确保您的nant构建与从Visual Studio手动构 build 置时的效果相同。