* ResourceManager.cs: Move code for determining manifest resource
authorGert Driesen <drieseng@users.sourceforge.net>
Mon, 17 Sep 2007 16:35:59 +0000 (16:35 -0000)
committerGert Driesen <drieseng@users.sourceforge.net>
Mon, 17 Sep 2007 16:35:59 +0000 (16:35 -0000)
name into separate method. Only use satellite assemblies for
non-invariant cultures. For invariant culture, only load resources
from main assembly.

svn path=/trunk/mcs/; revision=85900

mcs/class/corlib/System.Resources/ChangeLog
mcs/class/corlib/System.Resources/ResourceManager.cs

index 34d14d82143392b00234ceb7e58c962157cd0e5e..49245d4622f04b65b33a2cdc075971200c3f26d7 100644 (file)
@@ -1,3 +1,10 @@
+2007-09-17  Gert Driesen  <drieseng@users.sourceforge.net>
+
+       * ResourceManager.cs: Move code for determining manifest resource
+       name into separate method. Only use satellite assemblies for
+       non-invariant cultures. For invariant culture, only load resources
+       from main assembly.
+
 2007-09-17  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * ResourceManager.cs: BaseName(Field) should return only the name.
index 4d6ab845bf47c656eb1cab28cb886e29547d9494..88f7ae7b733a430a59b9ce07e1658a52a55db86a 100644 (file)
@@ -261,19 +261,10 @@ namespace System.Resources
                
                Stream GetManifestResourceStreamNoCase (Assembly ass, string fn)
                {
-                       string fullResourceName = null;
-                       if (resourceSource != null) {
-                               if (resourceSource.Namespace != null && resourceSource.Namespace.Length > 0)
-                                       fullResourceName = string.Concat (resourceSource.Namespace,
-                                               ".", fn);
-                               else
-                                       fullResourceName = fn;
-                       } else {
-                               fullResourceName = fn;
-                       }
+                       string resourceName = GetManifestResourceName (fn);
 
                        foreach (string s in ass.GetManifestResourceNames ())
-                               if (String.Compare (fullResourceName, s, true, CultureInfo.InvariantCulture) == 0)
+                               if (String.Compare (resourceName, s, true, CultureInfo.InvariantCulture) == 0)
                                        return ass.GetManifestResourceStream (s);
                        return null;
                }
@@ -325,18 +316,10 @@ namespace System.Resources
                                if (culture.Equals (neutral_culture))
                                        resourceCulture = CultureInfo.InvariantCulture;
 
+                               Stream stream = null;
+
                                string filename = GetResourceFileName (resourceCulture);
-                               
-                               // FIXME: shouldn't we only load non-invariant
-                               // resources from satellite assemblies, and only
-                               // load invariant resources from main assembly
-
-                               Stream stream = MainAssembly.GetManifestResourceStream (
-                                       resourceSource, filename);
-                               if (stream == null)
-                                       stream = GetManifestResourceStreamNoCase (
-                                               MainAssembly, filename);
-                               if (stream == null) {
+                               if (!resourceCulture.Equals (CultureInfo.InvariantCulture)) {
                                        /* Try a satellite assembly */
                                        Version sat_version = GetSatelliteContractVersion (MainAssembly);
                                        try {
@@ -348,6 +331,12 @@ namespace System.Resources
                                        } catch (Exception) {
                                                // Ignored
                                        }
+                               } else {
+                                       stream = MainAssembly.GetManifestResourceStream (
+                                               resourceSource, filename);
+                                       if (stream == null)
+                                               stream = GetManifestResourceStreamNoCase (
+                                                       MainAssembly, filename);
                                }
 
                                if (stream != null && Createifnotexists) {
@@ -359,13 +348,14 @@ namespace System.Resources
                                         * with it?
                                         */
                                        set = (ResourceSet) Activator.CreateInstance (resourceSetType, args);
-                               } else if (culture.Equals (CultureInfo.InvariantCulture)) {
+                               } else if (resourceCulture.Equals (CultureInfo.InvariantCulture)) {
                                        string msg = "Could not find any resource appropriate for the " +
-                                               "specified culture or its parents. " +
+                                               "specified culture or the neutral culture. " +
                                                "Make sure \"{1}\" was correctly embedded or " +
                                                "linked into assembly \"{0}\".";
                                        msg = String.Format (msg, MainAssembly != null ?
-                                               MainAssembly.GetName ().Name : "", filename);
+                                               MainAssembly.GetName ().Name : "",
+                                               GetManifestResourceName (filename));
                                        throw new MissingManifestResourceException (msg);
                                }
                        } else if (resourceDir != null || BaseNameField != null) {
@@ -471,5 +461,20 @@ namespace System.Resources
                                        + " for example, MyResources.en-US.resources");
 #endif
                }
+
+               string GetManifestResourceName (string fn)
+               {
+                       string resourceName = null;
+                       if (resourceSource != null) {
+                               if (resourceSource.Namespace != null && resourceSource.Namespace.Length > 0)
+                                       resourceName = string.Concat (resourceSource.Namespace,
+                                               ".", fn);
+                               else
+                                       resourceName = fn;
+                       } else {
+                               resourceName = fn;
+                       }
+                       return resourceName;
+               }
        }
 }