我想知道如何从另一个类库加载字符串资源。这是我的结构。
Solution\
CommonLibrary\
EmbeddedResource.resx
MainGUI\
如果我在CommonLibrary类上获取字符串,我只使用EmbeddedResource.INFO_START_MSG但是当我尝试使用类型化字符串资源时它无法识别资源文件。请注意,CommonGibrary已在MainGUI中引用。
我通常这样做。
Solution\
CommonLibrary\
MainGUI\
EmbeddedResource.resx
但我想在两个项目中使用相同的资源。
答案 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;
}
}