2011-02-01 87 views
0

我正在尝试创建一个多语言应用程序。我使用单独的资源文件就像每种语言:语言文件的单独文件夹

app.nl-NL.resx 
app.en-GB.resx 

但是,当我编译,它会创建子目录与编译的资源文件中的每个资源文件。

例如:

app\bin\Debug\nl-NL\app.resources.dll 
app\bin\Debug\en-GB\app.resources.dll 

我怎么把它们都放在像_app \ bin中一个单独的目录\调试\朗\ NL-NL_?

回答

3

您可以将它们全部放到单独的文件夹中。 这里是类似的question with solution。 我虽然有这个问题,并且这是我解决它的方法: 首先,您需要将您的“Lang”文件夹添加到程序将搜索本地化资源的文件夹列表中。 对于您应该增加这样的线路为.config项目的文件:

<configuration> 
... 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="Lang"/> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

info about probing element on msdn

比,重建后您可以将您生成的“XX-YY \ app.resources.dll”文件夹Lang文件夹,或者您可以将小脚本添加到Post-build事件命令行中,以便自动移动它们。 我用这样的命令:

robocopy $(TargetDir) $(TargetDir)\Lang "$(TargetName).resources.dll" /CREATE /S /XD Lang /IS /IT 
robocopy $(TargetDir) $(TargetDir)\Lang "$(TargetName).resources.dll" /MOVE /S /XD Lang /XL /IS /IT 

但要知道,ROBOCOPY的返回码1是正常的行为,和Visual Studio会认为这是一个错误。因此,如果您在构建后使用了其他任何命令,只需将robocopy放在它们之前即可。 或者检查%errorlevel%,因为它建议使用here

也许,有一个更好的解决方案,但它适用于我。

2

如果您希望本地化工作,您应该离开卫星组件原样。

这是他们如何工作,根据目录名称查找资源。

请参阅this MSDN页面(创建Satellite组件)上的“全局程序集缓存中未安装的Satellite组件的目录位置”一节。

+0

好吧,吸:(:(无论如何,谢谢! – 2011-02-01 16:34:14