我在安装程序中有以下组件
<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。
在我通过复制x86部分手动添加的wixproj中:
<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,但这并没有帮助。
尽管使用Win64="no",为什么x64 build仍然使用这一行
发布于 2019-04-07 22:40:28
Reference:Using Project References and Variables。
TargetPath:也许可以尝试使用$(var.ProjectName.TargetPath)而不是$(var.TargetDir)/my.dll.我认为这就是问题所在。TargetPath将是您构建的内容的完整路径和文件名。有关所有这些参数(预处理器变量),请参阅上面的"Reference“链接。
Extra Notes:还有几件事:
请注意组件组件部分:如果您的Visual Studio项目组件名为,则应添加: WiX文件中的
Program Files (x86) (32位)或Program Files (64-bit)Windows (64位)或SysWOW64 (32位,是amazingly)
Quick Sample:这是从内存中获取的,可能不是很好,但下面是一个实际使用的预处理器变量示例(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。
https://stackoverflow.com/questions/55557050
复制相似问题