我正在尝试创建一个多语言应用程序。我为每种语言使用单独的资源文件,如:
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 \ Debug \ Lang \ nl-NL_?
答案 0 :(得分:4)
您可以将它们全部放入单独的文件夹中。 这是类似的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放在它们之前。 或者按照建议here检查%errorlevel%。
也许,有一个更好的解决方案,但它适合我。
答案 1 :(得分:2)