Здравствуйте Oleg_Gashev, Вы писали:
OG>Здравствуйте! OG>Как добавить ресурсы в ехе файл и загружать их во время работы программы?
// Считываем текст сообщение из ресурсов.
// Оно было добавлено в проект в виде текстового фойла.
// Что бы VS7 включала это файл в ресурсы (точнее в манифейст)
// нужно открыть свойства этого файла и указать в
// свойстве "Build Action" значение "Embedded Resource".
// StreamReader позволяет прочесть Stream в виде
// текстовой строки.using(StreamReader sr = new StreamReader(
// Считываение ресурсов производится функцией GetManifestResourceStream
// Она вызывется у Assembly в которой расположен ресурс.
// Имя ресурса состоит из имени пространства имен "RegExRep"
// и имени файла.
Assembly.GetExecutingAssembly().GetManifestResourceStream("RegExRep.Promt.txt"),
// Для того чтобы получить корректные данные нужно
// указать кодировку. Можно задать значение Encoding.Default.
// При этом будет браться текущие системные
// настройки. Но файл содержит данные в кодировке
// 1251 и она может не соводать с кодировкой
// установленной в системе. По этому лучше
// задать кодировку жусткро.
System.Text.Encoding.GetEncoding(1251)))
{
// Читаем данные в строку (sr.ReadToEnd()) и выводим ее в окне.
MessageBox.Show(sr.ReadToEnd(), csAppName, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте VladD2, Вы писали:
VD>Здравствуйте Oleg_Gashev, Вы писали:
OG>>Здравствуйте! OG>>Как добавить ресурсы в ехе файл и загружать их во время работы программы?
VD>
VD>// Считываем текст сообщение из ресурсов.
VD>// Оно было добавлено в проект в виде текстового фойла.
VD>// Что бы VS7 включала это файл в ресурсы (точнее в манифейст)
VD>// нужно открыть свойства этого файла и указать в
VD>// свойстве "Build Action" значение "Embedded Resource".
VD>// StreamReader позволяет прочесть Stream в виде
VD>// текстовой строки.
VD>using(StreamReader sr = new StreamReader(
VD> // Считываение ресурсов производится функцией GetManifestResourceStream
VD> // Она вызывется у Assembly в которой расположен ресурс.
VD> // Имя ресурса состоит из имени пространства имен "RegExRep"
VD> // и имени файла.
VD> Assembly.GetExecutingAssembly().GetManifestResourceStream("RegExRep.Promt.txt"),
VD> // Для того чтобы получить корректные данные нужно
VD> // указать кодировку. Можно задать значение Encoding.Default.
VD> // При этом будет браться текущие системные
VD> // настройки. Но файл содержит данные в кодировке
VD> // 1251 и она может не соводать с кодировкой
VD> // установленной в системе. По этому лучше
VD> // задать кодировку жусткро.
VD> System.Text.Encoding.GetEncoding(1251)))
VD>{
VD> // Читаем данные в строку (sr.ReadToEnd()) и выводим ее в окне.
VD> MessageBox.Show(sr.ReadToEnd(), csAppName, MessageBoxButtons.OK, MessageBoxIcon.Information);
VD>}
VD>
Ok. Тогда как выудить информацию с Resource1.resx?
Здравствуйте Oleg_Gashev, Вы писали:
VD>>Да вроде все просто. Идеология малоть поменялась, а работать стало только удебнее.
OG>Уж куда проще. Как создать dll для ресурсов? Инфы я не нашел.
Попробуй создать любую другую. Выброси из проекта все файлы, добавь ресурсные и пометь их как включаемые в ресурсы. Ну, а потом ЛоадАссембли и вперед...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте Oleg_Gashev, Вы писали:
OG>Здравствуйте! OG>Как добавить ресурсы в ехе файл и загружать их во время работы программы?
OG>Пытался делать через OG>IResourceReader rs=new ResourceReader("Resource1.resx"); OG> OG>Программа требует наличие файла Resource1.resx
OG>Спасибо.
Создаем Windows Forms проект. Добавляем в него файл Resource1.resx. В файле Resource1.resx создаем элемент с именем "String1". Затем пишем:
Здравствуйте Рек, Вы писали:
Рек>Утилита ResEditor готовит resx-файлы из иконок, картинок, строк и imagelist'oв. Рек>Поставляется в исходнике, как пример.
Рек>"C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\Tutorials\resourcesandlocalization\reseditor\ResEditor.cs"
Здравствуйте Шапкин Константин Юрьевич, Вы писали:
ШКЮ>Здравствуйте Oleg_Gashev, Вы писали:
OG>>Здравствуйте! OG>>Как добавить ресурсы в ехе файл и загружать их во время работы программы?
OG>>Пытался делать через OG>>IResourceReader rs=new ResourceReader("Resource1.resx"); OG>> OG>>Программа требует наличие файла Resource1.resx
OG>>Спасибо.
ШКЮ>Создаем Windows Forms проект. Добавляем в него файл Resource1.resx. В файле Resource1.resx создаем элемент с именем "String1". Затем пишем:
ШКЮ>
An unhandled exception of type 'System.Resources.MissingManifestResourceException' occurred in mscorlib.dll
Additional information: Could not find any resources appropriate for your culture or the neutral culture in your assembly.
baseName: WindowsApplication1.Resource1 locationInfo: <null> resource file name: WindowsApplication1.Resource1.resources assembly: MyProject, Version=1.0.893.40010, Culture=neutral, PublicKeyToken=null
Здравствуйте Oleg_Gashev, Вы писали:
OG>Здравствуйте Шапкин Константин Юрьевич, Вы писали:
ШКЮ>>Здравствуйте Oleg_Gashev, Вы писали:
OG>>>Здравствуйте! OG>>>Как добавить ресурсы в ехе файл и загружать их во время работы программы?
OG>>>Пытался делать через OG>>>IResourceReader rs=new ResourceReader("Resource1.resx"); OG>>> OG>>>Программа требует наличие файла Resource1.resx
OG>>>Спасибо.
ШКЮ>>Создаем Windows Forms проект. Добавляем в него файл Resource1.resx. В файле Resource1.resx создаем элемент с именем "String1". Затем пишем:
ШКЮ>>
OG>An unhandled exception of type 'System.Resources.MissingManifestResourceException' occurred in mscorlib.dll
OG>Additional information: Could not find any resources appropriate for your culture or the neutral culture in your assembly. OG>baseName: WindowsApplication1.Resource1 locationInfo: <null> resource file name: WindowsApplication1.Resource1.resources assembly: MyProject, Version=1.0.893.40010, Culture=neutral, PublicKeyToken=null
Этот код для нового проекта Windows Forms, с названием проекта по умолчанию, WindowsApplication1.
У вас, похоже, проект называется MyProject, так? Тогда надо вместо "WindowsApplication1.Resource1" написасть "MyProject.Resource1".
S>Этот код для нового проекта Windows Forms, с названием проекта по умолчанию, WindowsApplication1. S>У вас, похоже, проект называется MyProject, так? Тогда надо вместо "WindowsApplication1.Resource1" написасть "MyProject.Resource1".
Здравствуйте Шапкин Константин Юрьевич, Вы писали:
ШКЮ>Создаем Windows Forms проект. Добавляем в него файл Resource1.resx. В файле Resource1.resx создаем элемент с именем "String1". Затем пишем: ШКЮ>
Это работает для windows-forms приложения.
Но теперь:
1. Создаем веб-приложение (ASP.NET Web Application) test.
2. Добавляем ресурс Resource1.resx
3. Пишем в него строку String1
4. Добавляем в WebForm1.aspx на Page_Load следующий код:
[ccode]
System.Resources.ResourceManager rm = new System.Resources.ResourceManager("test.Resource1", this.GetType().Assembly);
Response.Write(rm.GetString("String1"));
[ccode]
Запускаем.
Видим ошибку:
Could not find any resources appropriate for the specified culture (or the neutral culture) in the given assembly. Make sure "test.Resource1.resources" was correctly embedded or linked into assembly "1xrdylxb". baseName: test1.Resource1 locationInfo: <null> resource file name: test.Resource1.resources assembly: 1xrdylxb, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Замечаем, что здесь выводится странное имя ассамблеи (1xrdylxb). Модифицируем код:
[ccode]
System.Resources.ResourceManager rm = new System.Resources.ResourceManager(this.GetType().Assembly.GetName().Name + ".Resource1", this.GetType().Assembly);
Response.Write(rm.GetString("String1"));
[ccode]
Ошибка остается в следующем виде:
Could not find any resources appropriate for the specified culture (or the neutral culture) in the given assembly. Make sure "plszhih0.resource1.resources" was correctly embedded or linked into assembly "plszhih0". baseName: plszhih0.resource1 locationInfo: <null> resource file name: plszhih0.resource1.resources assembly: plszhih0, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Что тут еще можно сделать?
Re[3]: Ресурсы
От:
Аноним
Дата:
17.06.02 09:42
Оценка:
Здравствуйте Konstantin Sokolovskiy, Вы писали:
KS>Что тут еще можно сделать?
Тут можно не извращаться. Компилируешь свой resx файл в сборку, сборку ложишь в каталог bin проекта и наслаждаешся.
Здравствуйте Konstantin Sokolovskiy, Вы писали:
KS>Видим ошибку: KS>Could not find any resources appropriate for the specified culture (or the neutral culture) in the given assembly. Make sure "test.Resource1.resources" was correctly embedded or linked into assembly "1xrdylxb". baseName: test1.Resource1 locationInfo: <null> resource file name: test.Resource1.resources assembly: 1xrdylxb, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
А откуда "test1.Resource" взялось?
Я так понял, что вы код пишете не в codebehind классе? Тогда этот способ не пройдет...
Здравствуйте shapkin, Вы писали:
KS>>Видим ошибку: KS>>Could not find any resources appropriate for the specified culture (or the neutral culture) in the given assembly. Make sure "test.Resource1.resources" was correctly embedded or linked into assembly "1xrdylxb". baseName: test1.Resource1 locationInfo: <null> resource file name: test.Resource1.resources assembly: 1xrdylxb, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
S>А откуда "test1.Resource" взялось?
Прошу прощения. Там имелось ввиду "test.Resource1".
S>Я так понял, что вы код пишете не в codebehind классе? Тогда этот способ не пройдет...
В codebehind самом. Т.е. взялся абсолютно дефолтный проект, сгенерированный с нуля, и к нему был присобачен ресурс.
Здравствуйте Konstantin Sokolovskiy, Вы писали:
KS>Здравствуйте shapkin, Вы писали:
KS>>>Видим ошибку: KS>>>Could not find any resources appropriate for the specified culture (or the neutral culture) in the given assembly. Make sure "test.Resource1.resources" was correctly embedded or linked into assembly "1xrdylxb". baseName: test1.Resource1 locationInfo: <null> resource file name: test.Resource1.resources assembly: 1xrdylxb, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
S>>А откуда "test1.Resource" взялось?
KS>Прошу прощения. Там имелось ввиду "test.Resource1".
S>>Я так понял, что вы код пишете не в codebehind классе? Тогда этот способ не пройдет...
KS>В codebehind самом. Т.е. взялся абсолютно дефолтный проект, сгенерированный с нуля, и к нему был присобачен ресурс.
А почему же у вас имена сборок генерятся? Если создать все по умолчанию, имя сборки будет совпадать с именем приложения.