代码之家  ›  专栏  ›  技术社区  ›  David

WIX未定义的预处理器变量

  •  42
  • David  · 技术社区  · 15 年前

    我开始使用wix进行自动化构建,以创建我的C项目的m s i,并遇到错误 “未定义的预处理器变量”$(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>
    

    有人能告诉我这个吗?

    1 回复  |  直到 9 年前
        1
  •  45
  •   Wim Coenen    13 年前

    正如您已经指出的,您的nant构建脚本没有使用 wixproj 完全是文件。

    您在这里混合了两种不同的方法来构建WIX设置:

    1. 你可以使用 candle.exe light.exe 直接使用命令行工具。这忽略了 .wixproj 文件。这就是您在Nant构建脚本中所做的。传递预处理器变量的值,如 $(var.MyProject.TargetDir) ,使用如下选项 -dMyProject.TargetDir=c:\foo .

    2. 您可以使用voctive(用于wix的Visual Studio插件)编写.wixproj文件。与所有Visual Studio项目文件一样,wixproj文件实际上是一个可以用 msbuild.exe . 类变量 $(var.myproject.targetdir) 如果存在正确的项目引用,则由用于生成WIX设置的msbuild任务自动设置。

    我建议您使用 <msbuild> nant task . 这可以确保您的nant构建与从Visual Studio手动构建安装程序时的操作相同。