2013-04-03 71 views
0

我已经为三个项目的以下文件夹结构:的ResourceManager回落到默认的资源,而不是来自于卫星装配读书

MyClassLibrary1 
    Class1.cs 
    Resources\ 
     en-GB\ 
      Strings.en-GB.txt 
     Strings.resx 
      Strings.designer.cs (auto-generated) 
MyClassLibrary2 (references MyClassLibrary1) 
    Class1.cs 
MyAppExe (references MyClassLibrary1 and MyClassLibrary2) 
    Program.cs 

在MyClassLibrary1项目:

In Strings.resx, I've string resources defined, let's say: 
    <data name="SchoolString"><value>Preschool</value></data> 
In Strings.en-GB.txt, I have: 
    SchoolString=Playgroup 

MyClassLibrary1的项目属性 - >预 - 建立,我有以下内容:

CD $(ProjectDir)Resources 
FOR /D %%1 IN (*) DO (
    CD "%%1" 
    resgen.exe "Strings.%%1.txt" 
    if %errorlevel% 0 al.exe /t:lib /culture:"%%1" /embed:"Strings.%%1.resources" /out:MyClassLibrary1.resources.dll 
    if not exist "$(TargetDir)%%1" md "$(TargetDir)%%1" 
    move /Y "MyClassLibrary1.resources.dll" "$(TargetDir)%%1" 
    CD .. 
) 

在MyAppExe项目下,在Program.cs中:

static void Main() { 
    Strings.Culture = new CultureInfo("en-GB"); 
    Trace.WriteLine(Strings.SchoolString); 
} 

的问题是,ResourceManager的,由于某种原因,不断回落到默认的资源文件(嵌入在MyAppExe)。请帮我理解我在这里做错了什么。

无论我尝试什么,我都会得到的输出是“学龄前”而不是“游戏群”。这就像卫星组件没有得到解决。

+1

卫星程序集必须存在于具有与区域性相同名称的EXE目录的子目录中。您的情况下名为“en-GB”的目录。它看起来不像你的构建事件处理这个。 –

+0

实际上,它会转到bin \ Debug \ zh-CN \文件夹 – gplusplus

+0

@ hans-passant:刚刚遇到此知识库文章 - [KB839861](http://support.microsoft.com/kb/839861) - 我猜测我必须更改为'resgen.exe“字符串。%% 1.txt”“MyClassLibrary1.Resources.Strings。%% 1.txt”并更改为al.exe/t:lib/embed:“MyClassLibrary1 .Resources.Strings。%% 1.resources“/ out:”MyClassLibrary1.resources.dll“,用于al.exe生成正确的命名空间名称。我今晚会试试看看是否解决了这个问题。 – gplusplus

回答

0

按照http://support.microsoft.com/kb/839861提供的正确程序,该应用程序正在按预期工作。

我所要做的就是改变“预生成事件命令行”,如下所示:

CD "$(ProjectDir)Resources"
FOR /D %%1 IN (*) DO (
    CD "%%1"
    resgen.exe "Strings.%%1.txt" "MyClassLibrary1.Resources.Strings.%%1.resources"     if %errorlevel% == 0 (
        al.exe /t:lib /embed:"MyClassLibrary1.Resources.Strings.%%1.resources" /culture:"%%1" /out:MyClassLibrary1.resources.dll
        if not exist "$(TargetDir)%%1" md "$(TargetDir)%%1"
        move /Y "MyClassLibrary1.resources.dll" "$(TargetDir)%%1"
   )
    CD ..
)

希望它可以帮助别人。

相关问题