Wix:包含多个wxs文件的合并模块

时间:2009-09-25 14:53:51

标签: wix windows-installer wix3 merge-module

所以,我正在尝试创建一个合并模块,其中有多个wxs文件。我认为一切都很好,因为我的项目的构建成功了。后来,我意识到其中一个辅助wxs文件的Source属性中使用的路径完全错误,但编译器没有给出以下错误:

系统找不到文件'.. \ .. \ release_area \ WrongPath \ Component2.dll'。

在辅助wxs文件中,我添加了一个 DirectoryRef 元素,引用主wxs文件中的文件夹 AssemblyFolder ,以创建两个文件之间的引用。

主要wxs文件

<Module Id="MyModule" Language="1033" Version="1.0.0.0">
    <Package InstallerVersion="200" Platform="x86"/>
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="AssemblyFolder">   
            <Component Id="Component1.dll">
             <File Id="Component1.dll" Name="Component1.dll" 
          KeyPath="yes" Assembly=".net" 
          Source="..\..\release_area\Comp\Component1.dll" />
         </Component>
        </Directory>
    </Directory>
</Module>

辅助wxs文件

<Fragment>
    <DirectoryRef Id="AssemblyFolder">
        <Component Id="Component2.dll">
         <File Id="Component2.dll" Name="Component2.dll" 
             KeyPath="yes" Assembly=".net" 
             Source="..\..\release_area\WrongPath\Component2.dll" />
     </Component>
    </DirectoryRef>
</Fragment>

只是为了澄清:为了测试,我直接在主wxs中复制了我的<Component Id="Component2.dll">并得到错误:系统找不到文件'.. \ .. \ release_area \ WrongPath \ Component2的.dll”。

所以,我的猜测是辅助wxs文件和主wxs文件之间的引用是完全错误的,这就是为什么编译器不验证文件路径但我无法弄清楚问题是什么。

1 个答案:

答案 0 :(得分:5)

问题不在编译器(candle.exe)中。 Candle.exe创建单独的“部分”(模块和片段都是“部分”)。链接器(light.exe)负责将它们全部拉到一起。 Light.exe从“入口部分”(产品,模块或补丁)开始,并从那里开始跟随参考。由于您没有从Main.wxs到Secondary.wxs的引用,因此Secondary.wxs中的内容永远不会被提取。要解决这个问题,只需添加:

<ComponentRef Id="Component2.dll"/>

在Module元素下的某个地方(我通常将它们放在最后)。如果你有很多组件,那么ComponentGroup和ComponentGroupRef就会变得有用。