2011-02-01 122 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