如何从其他程序集访问默认资源

How to access default resource from other assembly

我在其他程序集中编译了默认资源文件 (*.resx)(与默认 Properties.Resources 一样),此程序集由 Assembly 对象引用。如何访问其中的特定资源对象?

我试过了:

public static class Resource
{
    public static T Get<T>(Assembly assembly, string name)
    {
        ResourceManager manager = new ResourceManager(assembly.GetName().Name + ".Properties.Resources", assembly);
        return (T)manager.GetObject(name);
    }
}

这会抛出 MissingManifestResourceException 并且调试器显示通过 manager 被初始化为 ResourceManager 实例,manager.ResourceSet 是空的。

所以程序集本身并不知道默认命名空间。但是类型知道它们所属的名称空间是什么。试试这个: new System.Resources.ResourceManager(assembly.DefinedTypes.First(x => x.Name == "Resources").FullName, assembly); 当然,理想情况下你应该做更多的检查以确保万无一失,但这应该会让你走上正确的轨道