访问不同类库中的字符串资源

本文关键字:字符串资源 类库 同类 访问 | 更新日期: 2023-09-27 18:24:12

我想知道如何从另一个类库加载字符串资源。这是我的结构。

Solution'
    CommonLibrary'
        EmbeddedResource.resx
    MainGUI'

如果我在CommonLibrary的类上获得字符串,我只使用EmbeddedResource.INFO_START_MSG,但当我尝试使用类型化字符串资源时,它无法识别资源文件。请注意,CommonLibrary已经在MainGUI中被引用。

我通常这样做。

Solution'
    CommonLibrary'
    MainGUI'
        EmbeddedResource.resx

但我想在两个项目上使用相同的资源。

访问不同类库中的字符串资源

将对库的引用添加到主应用程序中。确保(在资源文件上)"访问修饰符"设置为public。

这样引用字符串:

textBox1.Text = ClassLibrary1.Resource1.ClassLibrary1TestString;

我通过右键单击添加了资源文件,因此名称中的"1"。如果您转到类库的"属性"页面并单击"资源"选项卡,则可以添加默认的资源文件,该文件的名称中不会有数字"1"。

只要确保你的价值观是公开的,并且你在主项目中有参考,你应该没有问题。

默认情况下,资源类为internal,这意味着它不会在其他程序集中直接可用。尝试将其更改为public。在此基础上,您还必须使资源类public中的字符串属性

这是我过去的做法。然而,这可能不适用于程序集:

public static Stream GetStream(string resourceName, Assembly containingAssembly)
{
    string fullResourceName = containingAssembly.GetName().Name + "." + resourceName;
    Stream result = containingAssembly.GetManifestResourceStream(fullResourceName);
    if (result == null)
    {
        // throw not found exception
    }
    return result;
}

public static string GetString(string resourceName, Assembly containingAssembly)
{
    string result = String.Empty;
    Stream sourceStream = GetStream(resourceName, containingAssembly);
    if (sourceStream != null)
    {
        using (StreamReader streamReader = new StreamReader(sourceStream))
        {
            result = streamReader.ReadToEnd();
        }
    }
    if (resourceName != null)
    {
        return result;
    } 
}