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

时间:2012-02-13 11:24:03

标签: c# embedded-resource

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

Solution\
    CommonLibrary\
        EmbeddedResource.resx
    MainGUI\

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

我通常这样做。

Solution\
    CommonLibrary\
    MainGUI\
        EmbeddedResource.resx

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

3 个答案:

答案 0 :(得分:12)

将对库的引用添加到主应用程序。确保(在Resources文件中)“Access Modifier”设置为public。

像这样引用字符串:

textBox1.Text = ClassLibrary1.Resource1.ClassLibrary1TestString;

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

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

答案 1 :(得分:3)

默认情况下,资源类为internal,这意味着它不会在其他程序集中直接使用。尝试将其更改为public。从此开始,您还必须在资源类public

中创建字符串属性

答案 2 :(得分:2)

这是我过去做过的方式。但是,这可能不适用于程序集:

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;
    } 
}