WIX Win64= "no"不起作用



>我在安装程序中有以下组件

<Component Id="my.dll" Guid="*" Win64="no">
<File Id="my.dll" Name="my.dll" KeyPath="yes" ReadOnly="yes" DiskId="1" Source="$(var.TargetDir)/my.dll" />
</Component>

在解决方案平台 x64 的 Visual Studio 配置管理器中,安装程序项目设置为 x64。

在构建x64时,构建仍然在这一部分失败,尽管Win64设置为"no",但仍会寻找my.dll

在 wixproj 中,我通过复制 x86 部分手动添加:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<OutputPath>bin$(Configuration)</OutputPath>
<IntermediateOutputPath>obj$(Configuration)</IntermediateOutputPath>
<DefineConstants>Debug</DefineConstants>
</PropertyGroup>

'Release|x64'做了同样的事情。 并尝试删除以下内容:

<Platform Condition=" '$(Platform)' == '' ">x86</Platform>

并将x86更改为x64但这没有帮助。

为什么x64构建仍然关于这条线,虽然Win64="no"

参考 :使用项目引用和变量。


TargetPath :也许尝试使用$(var.ProjectName.TargetPath)而不是$(var.TargetDir)/my.dll。我认为这是错误的。目标路径将是具有您构建的内容的文件名的整个路径。有关所有这些参数(预处理器变量),请参阅上面的">参考"链接。


额外说明 :还有几件事:

  • 请注意">项目名称">部分:如果您的Visual Studio 项目名为MyLittleProject,则应添加:$(var.MyLittleProject.TargetPath)
  • WiX 文件中组件元素的Win64="no"属性会影响文件在最终用户安装的目标系统上的安装位置,而不是成功生成后 Visual Studio 生成文件在磁盘上的位置:
    • Program Files (x86)(32 位)或Program Files(64 位)
    • Windows(64 位)或SysWOW64(32 位,是的,令人惊讶)

快速示例 :这是来自内存,可能不是很好,但这里是运行中的预处理器变量示例(在此类结构上得到了这么长的答案):

<?if $(var.MyProjectName.Platform) = "x64" ?>      
<Component>
<File Source="C:TestTest1.exe" />
</Component>
<?endif?>
<?if $(var.MyProjectName.Platform) = "Win32" ?>
<Component>
<File Source="C:TestTest2.exe" />
</Component>
<?endif?>
<Component>
<File Source="$(var.MyProjectName.TargetPath)" />
</Component>

确保配置设置为重新生成所有项目,包括您的WiX项目。可能会有意外的排除。请注意平台可能会说平台Win32x64(而不是可能预期的x86)-常见错误。Inspect the compiled MSI.此外,请确保设置正确的项目生成顺序(操作项目依赖项)。


.sys。BUILDARCH:还有sys.BUILDARCH内置变量,说实话,这让我有点困惑。我没有用过它。在此处搜索:预处理器。还有github。

最新更新