我刚刚开始使用WiX,因为我需要能够在CI服务器上自动构建MSI。反正自动包含项目的所有依赖项吗?
答案 0 :(得分:9)
heat.exe的“proj”扩展程序正在变得越来越好。 Heat还没有准备好以自动化方式用于生产。这是将初始结构放在一起的一种非常合理的方法,但是在重复运行时不能做正确的事情(例如,Component / @Guids不稳定,但是......)。
当在heat.exe中解决上述问题后,将其合并到您的构建过程中肯定会省去上面提到的所有麻烦。我们的列表是在核心工具集中修复了最令人震惊的错误后做得更好。
答案 1 :(得分:4)
我刚刚开始使用WIX,我做了一个快速而肮脏的技巧来自动添加引用。我们的想法是扫描要打包的项目的输出文件夹中的所有.dll。
在预构建WIX项目时,添加
call "$(ProjectDir)GenerateDependency.bat" "$(SolutionDir)" "$(ProjectDir)Dependencies.wxs"
在包含
的WIX项目中添加GenerateDependency.bat文件@echo off
set SOLUTIONDIR=%1
set OUTPUTFILE=%2
echo Starting Dependency check...
echo ^<?xml version="1.0" encoding="UTF-8"?^> > %OUTPUTFILE%
echo ^<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"^> >> %OUTPUTFILE%
echo ^<Fragment^> >> %OUTPUTFILE%
echo ^<ComponentGroup Id="MesDependance" Directory="INSTALLFOLDER"^> >> %OUTPUTFILE%
for %%F in (%SOLUTIONDIR%WixServiceInstallerExample\bin\Debug\*.dll) do (
echo "-- Adding %%~nxF"
echo ^<Component Id="%%~nF"^> >> %OUTPUTFILE%
echo ^<File Id="%%~nF" Name="%%~nxF" Source="%%~dpnxF" Vital="yes" KeyPath="yes" DiskId="1"/^> >> %OUTPUTFILE%
echo ^</Component^> >> %OUTPUTFILE%
)
echo ^</ComponentGroup^> >> %OUTPUTFILE%
echo ^</Fragment^> >> %OUTPUTFILE%
echo ^</Wix^> >> %OUTPUTFILE%
echo Dependency check done.
根据需要修改“WixServiceInstallerExample \ bin \ Debug”。此soulhd是您要打包的项目的输出文件夹
注意:请注意,VisualStudio经常会遇到编码问题。使用Notepad ++更好地编辑此文件,并确保它使用ANSI,而不是UTF8。
这将生成您可以包含在项目中的Dependencies.wxs。如果您受源代码管理,请将其从中排除。
每个构建都会重新扫描.dll并在实际制作包之前重建Dependencies.wxs。
答案 2 :(得分:1)
从Wintellect看一下paraffin。
答案 3 :(得分:0)
根据我的经验,Wix仍然是一个非常手动的过程。您必须单独添加每个依赖项 - 我认为您的想法是在构建项目的同时构建Wix安装程序,并在代码中添加每个项目时添加它们。通过这种方式,似乎不必回头去回顾项目。尽管如此,这肯定是一个很好的建议!
答案 4 :(得分:0)
我没有在WIX中看到可以做到这一点的东西,你应该知道你的解决方案/项目所需的所有依赖项。阅读此blog,里面是引用:
保持你的来源关闭和你的 依赖性更接近(道歉 太阳姿。)
我发现确保MSI中没有遗漏任何内容的最佳方法是在安装干净的虚拟PC上测试安装程序。
我见过的最接近你想要的东西就是这个人的blog。
目前,我们不得不手工完成。
答案 5 :(得分:0)
我刚开始使用WIX并认为WixEdit(http://wixedit.sourceforge.net/)摇滚可以添加多个文件/ dll,解决了我对Wix轻松获取文件的挫败感。只需保持文件有条理,然后使用导入文件夹功能。当然,它并不支持每个文件都有一个组件的新3.0建议。
热量也很好,每个文件支持一个组件。我的列表中的下一步是获得一些自动化,以便这些文件自动更新为视觉工作室。