20

我刚开始使用 WiX,因为我需要能够在我们的 CI 服务器上自动构建 MSI。反正有没有自动包含项目的所有依赖项?

4

6 回答 6

9

heat.exe 的“proj”扩展越来越好。 热量还没有完全准备好以自动化方式用于生产。这是一种将初始结构组合在一起的非常合理的方法,但在重复运行时并不能完全正确地完成(例如,Component/@Guids 还不稳定,但......)。

当上述问题在 heat.exe 中解决后,将其合并到您的构建过程中肯定会省去人们上面提到的所有麻烦。在核心工具集中修复了最严重的错误之后,我们的清单上会做得更好。

于 2008-11-19T16:39:05.437 回答
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。

于 2013-08-29T17:37:57.653 回答
1

看看来自 Wintellect 的石蜡

于 2009-03-26T14:40:10.950 回答
0

根据我的经验,Wix 仍然是一个非常手动的过程。您必须单独添加每个依赖项 - 我认为您的想法是在构建项目的同时构建 Wix 安装程序,并在代码中添加每个项目时添加它。这样一来,它似乎比不得不回去回顾项目更令人生畏。不过,这肯定是一个很好的增强建议!

于 2008-11-19T16:16:04.220 回答
0

我还没有在 WIX 中看到可以做到这一点的东西,您应该知道您的解决方案/项目所需的所有依赖项。阅读这个博客,里面是一个引用:

保持你的源代码和你的依赖关系更紧密(向孙子道歉。)

我发现确保在 MSI 中没有忘记任何内容的最佳方法是在干净安装的虚拟 PC 上测试安装程序。

我见过的最接近你想要的东西是这个人的博客

目前,我们只能手动完成。

于 2008-11-19T16:18:58.440 回答
0

我刚开始使用 WIX,并认为 WixEdit( http://wixedit.sourceforge.net/ ) 可以添加多个文件/dll,解决了我对 Wix 轻松获取文件的挫败感。只需保持文件井井有条,然后使用导入文件夹功能。当然,它不支持每个文件一个组件的新 3.0 建议。

热量也很好,每个文件支持一个组件。我的清单上的下一个是获得一些自动化,以便这些文件在 la Visual Studio 中自动更新。

于 2009-03-03T21:54:56.137 回答