我在安装程序中具有以下组件
<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时,尽管my.dll
设置为“ Win64
”,但在此部分上构建仍会失败,正在寻找no
。
在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"
仍在此行上构建?
答案 0 :(得分:0)
TargetPath :也许尝试使用 $(var.ProjectName.TargetPath)
而不是 $(var.TargetDir)/my.dll
。我认为那是错的。 TargetPath将是您构建的文件名的完整路径。有关所有这些参数(预处理器变量),请参见上面的“ 参考”链接。
其他说明 :还有两件事:
MyLittleProject
,则应添加: $(var.MyLittleProject.TargetPath)
。Win64="no"
属性会影响文件在最终用户安装发生的目标系统上的安装位置,而不是Visual Studio构建文件的位置成功构建后在磁盘上:
Program Files (x86)
(32位)或 Program Files
(64位)Windows
(64位)或 SysWOW64
(32位,不错)快速示例 :这是从内存中提取的,可能不是很好,但这是实际使用的预处理器变量的示例(got this long answer on such constructs):>
<?if $(var.MyProjectName.Platform) = "x64" ?>
<Component>
<File Source="C:\Test\Test1.exe" />
</Component>
<?endif?>
<?if $(var.MyProjectName.Platform) = "Win32" ?>
<Component>
<File Source="C:\Test\Test2.exe" />
</Component>
<?endif?>
<Component>
<File Source="$(var.MyProjectName.TargetPath)" />
</Component>
确保配置已设置为重建所有项目,包括WiX项目。可能会有意外的排除。请注意,平台对平台的说法是 Win32
与 x64
(而不是可能预期的 x86
)-常见错误。 Inspect the compiled MSI
。另外,请确保设置正确的项目构建顺序(处理项目依赖项)。
sys.BUILDARCH :还有 sys.BUILDARCH
内置变量,这让我有些困惑诚实。我没有用过。在这里搜索:Preprocessor。还有github。