2009-09-25 79 views
3

所以,我想创建一个合并模块,我有多个wxs文件。自从我的项目构建成功以来,我认为一切都很好。后来,我意识到Source属性中用于次要wxs文件之一的路径是完全错误的,但是编译器没有给出以下错误:Wix:合并模块与多个wxs文件

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

在二次WXS文件,我添加一个DirectoryRef元件参考所述文件夹AssemblyFolder在主WXS文件以创建两个文件之间的参照。

主要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> 

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

所以,我的猜测是,副wxs文件和主wxs文件之间的引用是完全错误的,这就是为什么编译器不验证文件路径,但我找不出什么问题。

回答

5

该问题不在编译器(candle.exe)中。 Candle.exe创建单独的“部分”(模块和片段都是“部分”)。它是链接器(light.exe),负责将它们拉在一起。 Light.exe从“入口部分”(产品,模块或修补程序)开始,然后从该处继续参考。既然你没有从你的Main.wxs您Secondary.wxs一个参考,在Secondary.wxs的东西永远不会在拉动要解决此再补充:

<ComponentRef Id="Component2.dll"/>

您模块下的某处元素(我通常把它们放在最后)。如果你得到很多组件,那么ComponentGroup和ComponentGroupRef就会变得有用。

+0

非常感谢!它像一个魅力。现在我可以开始将旧Wise安装程序转换为Wix – 2009-09-26 19:24:58