2017-04-17 26 views
0

我的项目中有全局和本地嵌入式资源,如图所示。Assembly.GetExecutingAssembly()。GetManifestResourceNames()从App_LocalResources返回资源吗?

Resources files in my project with build action as embedded resources

我有一个函数ResourceText如下

   public static string GLOBAL_RESOURCES = "SampleClient.App_GlobalResources.Global.resources"; 

       /// <summary> 
       /// Used in JavaScript/front code to return resource translations for current page or global resource file 
       /// </summary> 
       /// <param name="pResourceKey"></param> 
       /// <returns></returns> 
       /// <remarks></remarks> 
       public string ResourceText(string pResourceKey, bool pGlobalResource = false) 
       { 
        if (string.IsNullOrEmpty(pResourceKey)) throw new ArgumentNullException("ResourceKey cannot be empty"); 

        if (pGlobalResource) 
        { 
         // Find the value from the global resource 

         ResourceManager tResourceManager = new System.Resources.ResourceManager(GLOBAL_RESOURCES.Replace(".resources", ""), this.GetType().BaseType.Assembly); 
         tResourceManager.IgnoreCase = true; 

         string tTranlsation = tResourceManager.GetString(pResourceKey); 

         return string.IsNullOrEmpty(tTranlsation) ? pResourceKey : tTranlsation; 
        } 
        else 
        { 
         string[] tAssemblyNames = Assembly.GetExecutingAssembly().GetManifestResourceNames(); 
         try 
         { 
          if (tAssemblyNames.Length >= 1) // There is a local file associated 
          { 
           // Get value from the local resource 
           string tAssemblyName = this.Page.GetType().BaseType.FullName.Insert(this.Page.GetType().BaseType.FullName.LastIndexOf(".") + 1, "App_LocalResources."); 


           string tResName = (from n in tAssemblyNames where n.Contains(tAssemblyName + ".aspx") select n).First().Replace(".resources", ""); 
           ResourceManager tResourceManager = new System.Resources.ResourceManager(tResName, this.GetType().BaseType.Assembly); 

           tResourceManager.IgnoreCase = true; 


           string tTranlsation = tResourceManager.GetString(pResourceKey); 
           return string.IsNullOrEmpty(tTranlsation) ? pResourceKey : tTranlsation; 
          } 
         } 

         catch (Exception ex) 
         { 
          throw (ex); 
          // Check the local resources 
         } 

        } 
        // Fall back 
        return pResourceKey; 
       } 

被称为在我的aspx页面

<input type="search" id="inputCustomerGroupGridSearch" placeholder="<%= ResourceText("PlaceholderSearch")%>" /> 
      <button type="button" id="buttonNewCustomerGroup" style="float: right" class="PrimaryButton"><%=ResourceText("ButtonNew")%></button> 

当我调试的功能ResourceText,线代码

string[] tAssemblyNames = Assembly.GetExecutingAssembly().GetManifestResourceNames(); 

仅返回“SampleClient.App_GlobalResources.Global.resources”而非“SampleClient.Modules.Customers.App_LocalResources.Customers.resouces”。为什么App_LocalResources中的资源不是由Assembly.GetExecutingAssembly()。GetManifestResourceNames()返回的?

回答

0

解决:我在我的bin文件夹中添加了强类型的程序集App_LocalResources.resources.dll。然后它在执行Assembly.GetExecutingAssembly()时被列在资源名称中。GetManifestResourceNames();

所以,我可以调用我的ResourceText函数全局和本地资源。