我创建了一个多语言应用程序,它使用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都被复制到安装文件夹,而不是特定的资源文件......但我不知道如何解决它。任何人都可以提供有关如何解决这个问题的任何提示?
答案 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>