在wix安装程序中添加资源文件

时间:2017-05-08 16:09:38

标签: wix components

我创建了一个多语言应用程序,它使用2个不同的资源文件来管理UI语言,因此当我构建并执行我的程序时,在我的bin目录中,我有我的应用程序文件和两个文件夹,en-GB和pt- PT。

我现在正在尝试使用Wix创建一个安装程序,因为我正在定义以下目录:

<Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
         <Directory Id="INSTALLFOLDER" Name="App" >
            <Directory Id="LOCALEEN" Name="en-GB"/>
            <Directory Id="LOCALEPT" Name="pt-PT"/>
          </Directory>
      </Directory>
    </Directory>
  </Fragment>

然后,我定义了以下组件:

 <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <Component Id="App.resources.en.GB.dll" Guid="...">
        <CreateFolder />
        <File Id="App.resources.en.GB.dll" Name="App.resources.dll" Source="$(var.App.App_TargetDir)en-GB\App.resources.dll" />
      </Component>

    <Component Id="App.resources.pt.PT.dll" Guid="...">
        <CreateFolder />
        <File Id="App.resources.pt.PT.dll" Name="App.resources.dll" Source="$(var.App.App_TargetDir)pt-PT\App.resources.dll" />
      </Component>

    ... Other components...

    </ComponentGroup>
  </Fragment>

当我重建我的解决方案时,我收到以下错误:

  

'App.resources.dll'安装在'[ProgramFilesFolder] \ App \'中   LFN系统上的不同组件:'App.resources.en.GB.dll'和   'App.resources.pt.PT.dll'。这会打破组件引用计数。

我理解这个问题,资源dll都被复制到安装文件夹,而不是特定的资源文件......但我不知道如何解决它。任何人都可以提供有关如何解决这个问题的任何提示?

1 个答案:

答案 0 :(得分:1)

只需引用您想要组件的目录,例如。 Directory="LOCALEEN"。无需指定<CreateFolder /> 我还建议保持某种命名约定。您的组件和Fils具有相同的ID。见https://stackoverflow.com/a/1801464/4634044。所以这应该做你期望的事情:

<Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
        <Component Id="C_EnglishLocale" Guid="..." Directory="LOCALEEN">
            <File Id="Fi_EnglishLocale" Name="App.resources.dll" Source="$(var.App.App_TargetDir)en-GB\App.resources.dll" />
        </Component>

        <Component Id="C_PolnishLocale" Guid="..." Directory="LOCALEPT">
            <File Id="Fi_PolnishLocale" Name="App.resources.dll" Source="$(var.App.App_TargetDir)pt-PT\App.resources.dll" />
        </Component>
    </ComponentGroup>
</Fragment>