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文件中组件元素的
    Win64=“no”
    属性影响文件在最终用户安装的目标系统上的安装位置,而不是成功生成后Visual Studio生成文件在磁盘上的位置:
    • 程序文件(x86)
      (32位)或
      程序文件
      (64位)
    • Windows
      (64位)或
      SysWOW64
      (32位,是的,令人惊讶)

快速示例:这是来自内存的,可能不是很好,但下面是一个正在运行的预处理器变量示例():


确保将配置设置为重建所有项目,包括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>