WIX Win64=";否";无效
我在安装程序中有以下组件WIX Win64=";否";无效,wix,Wix,我在安装程序中有以下组件 <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> 对'Release | x64'执行了相同的操作。并尝试删除以下内容: <Platf
<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>
对'Release | x64'
执行了相同的操作。并尝试删除以下内容:
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
x86
并且还将x86
更改为x64
,但这没有帮助
尽管Win64=“否”
,为什么构建仍然与此行有关
参考:
TargetPath:可能尝试使用
$(var.ProjectName.TargetPath)
而不是$(var.TargetDir)/my.dll
。我认为这就是问题所在。TargetPath将是您构建的文件名为的整个路径。有关所有这些参数(预处理器变量),请参见上面的“参考””链接
额外注意事项:还有几件事:
- 请注意项目名称部分:如果您的Visual Studio项目被称为
,那么您应该添加:MyLittleProject
$(var.MyLittleProject.TargetPath)
- WiX文件中组件元素的
属性影响文件在最终用户安装的目标系统上的安装位置,而不是成功生成后Visual Studio生成文件在磁盘上的位置:Win64=“no”
(32位)或程序文件(x86)
(64位)程序文件
(64位)或Windows
(32位,是的,令人惊讶)SysWOW64
快速示例:这是来自内存的,可能不是很好,但下面是一个正在运行的预处理器变量示例():
确保将配置设置为重建所有项目,包括WiX项目。可能会出现意外的例外情况。请注意,对于平台(而不是可能预期的x86
),平台可能会说,而不是
)-常见错误检查已编译的MSI
。还要确保设置正确的项目构建顺序(操作项目依赖项)
sys.BUILDARCH:还有sys.BUILDARCH
内置变量,老实说,这让我有点困惑。我没有用过。在此处搜索:。和
参考:
TargetPath:可能尝试使用$(var.ProjectName.TargetPath)
而不是$(var.TargetDir)/my.dll
。我认为这就是问题所在。TargetPath将是您构建的文件名为的整个路径。有关所有这些参数(预处理器变量),请参见上面的“参考””链接
额外注意事项:还有几件事:
- 请注意项目名称部分:如果您的Visual Studio项目被称为
MyLittleProject
,那么您应该添加:$(var.MyLittleProject.TargetPath)
- WiX文件中组件元素的
Win64=“no”
属性影响文件在最终用户安装的目标系统上的安装位置,而不是成功生成后Visual Studio生成文件在磁盘上的位置:
程序文件(x86)
(32位)或程序文件
(64位)
Windows
(64位)或SysWOW64
(32位,是的,令人惊讶)
快速示例:这是来自内存的,可能不是很好,但下面是一个正在运行的预处理器变量示例():
确保将配置设置为重建所有项目,包括WiX项目。可能会出现意外的例外情况。请注意,对于平台(而不是可能预期的x86
),平台可能会说,而不是
)-常见错误检查已编译的MSI
。还要确保设置正确的项目构建顺序(操作项目依赖项)
sys.BUILDARCH:还有sys.BUILDARCH
内置变量,老实说,这让我有点困惑。我没有用过。在此处搜索:。和。那么我可以控制每个平台包含哪些文件(例如x64
)&哪些文件被忽略?这可能是一种更明智的方法,但您总是可以使用。将使用快速提示更新答案。和线索(必须登录github.com才能工作)。那么,我可以控制每个平台包含哪些文件(例如x64
)&哪些文件被忽略?这可能是一种更明智的方法,但您总是可以使用。将使用快速提示更新答案。如果要排除创作,请使用@SteinÅsmul建议的预处理器Win64
控制组件属性,而不是是否包含。如果要排除编写,请按照@SteinÅsmul的建议使用预处理器Win64
控制组件属性,而不是组件是否包含在内。
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<?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>