>我在安装程序中有以下组件
<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项目。可能会有意外的排除。请注意平台可能会说平台Win32
与x64
(而不是可能预期的x86
)-常见错误。Inspect the compiled MSI
.此外,请确保设置正确的项目生成顺序(操作项目依赖项)。
.sys。BUILDARCH:还有sys.BUILDARCH
内置变量,说实话,这让我有点困惑。我没有用过它。在此处搜索:预处理器。还有github。