将大型资源文件物理拆分为多个文件,而编译器将其视为一个文件

Lal*_*lit 6 .net asp.net resources

是否可以将一个大的资源(.resx)文件物理地拆分为多个文件,并仍然使用相同的syntex来获取数据

GlobalResource.resx

GlobalResource1.resx,GlobalResource2.resx,GlobalResource3.resx,......

并且所有文件将被拼凑成一个并使用like

Resources.GlobalResource.errParamNameReq
Run Code Online (Sandbox Code Playgroud)

在Asp.net 3.5中使用它.在svn上工作时遇到问题,每次尝试签入时都会遇到冲突,所以我想把它拆分成许多文件,而编译器则把它当作一个.

Iva*_*vov 2

每个资源文件都有一个代码隐藏文件,用于将资源项声明为静态属性。Visual Studio 等工具还使用大量自动代码生成来同步 xm​​l/资源编辑器数据和代码隐藏文件。将资源拆分为多个文件可能是可能的,但稍后自动代码生成的影响可能会导致比简单地合并更改更多的问题。一个可能的解决方案是创建不同的资源文件。然后有一个类为每个资源管理器保存实例集合ResourceManager。像这样的东西:

    public class ResourceWrapper
    {
        private ICollection<ResourceManager> resourceManagers;

        public ResourceWrapper(IEnumerable<ResourceManager> managers)
        {
            resourceManagers = new List<ResourceManager>(managers);
        }

        public string GetString(string key)
        {
            foreach (var resourceManager in resourceManagers)
            {
                string res = resourceManager.GetString(key);
                if (res != null)
                {
                    return res;
                }
            }
            return null;
        }
        public string GetString(string key, CultureInfo culture)
        {
            foreach (var resourceManager in resourceManagers)
            {
                string res = resourceManager.GetString(key, culture);
                if (res != null)
                {
                    return res;
                }
            }
            return null;
        }
    }
Run Code Online (Sandbox Code Playgroud)

您只需获取所有资源并将它们传递给构造函数即可。您可能希望在创建包装器实例后保留它,以避免为每个资源文件创建资源管理器 - 静态文件即可。上述代码的唯一问题是不能保证 2 个或更多资源文件定义相同的密钥。如果发生这种情况,代码将仅返回第一个匹配项。