Доступ к строковому ресурсу из другой библиотеки классов - PullRequest
4 голосов
/ 13 февраля 2012

Я хотел бы знать, как загрузить строковый ресурс из другой библиотеки классов.Вот моя структура.

Solution\
    CommonLibrary\
        EmbeddedResource.resx
    MainGUI\

Если я получаю строку в классах CommonLibrary, я просто использую EmbeddedResource.INFO_START_MSG, но когда я пытаюсь использовать типизированный строковый ресурс, он не может распознать файл ресурса.Обратите внимание, что на CommonLibrary уже есть ссылка в MainGUI.

Обычно я делаю это таким образом.

Solution\
    CommonLibrary\
    MainGUI\
        EmbeddedResource.resx

Но я хочу использовать один и тот же ресурс в обоих проектах.

Ответы [ 3 ]

12 голосов
/ 13 февраля 2012

Добавить ссылку на библиотеку в основное приложение. Убедитесь, что (в файле ресурсов) для «Модификатор доступа» установлено значение public.

Ссылка на строку выглядит так:

textBox1.Text = ClassLibrary1.Resource1.ClassLibrary1TestString;

Я добавил файл ресурса, щелкнув правой кнопкой мыши, таким образом, «1» в названии. Если вы перейдете на страницу «Свойства» для библиотеки классов и нажмете на вкладку «Ресурсы», вы можете добавить файл ресурсов по умолчанию, в имени которого не будет цифры «1».

Просто убедитесь, что ваши ценности общедоступны, и что у вас есть ссылка в основном проекте, и у вас не должно быть проблем.

3 голосов
/ 13 февраля 2012

По умолчанию класс ресурсов internal, что означает, что он не будет напрямую доступен в других сборках.Попробуйте изменить его на public.Часть из этого вам также придется сделать свойства строки в классе ресурсов public

2 голосов
/ 13 февраля 2012

Так я делал это в прошлом. Однако это может не работать в разных сборках:

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