Ресурсы
От: Oleg_Gashev
Дата: 07.06.02 11:42
Оценка:
Здравствуйте!
Как добавить ресурсы в ехе файл и загружать их во время работы программы?

Пытался делать через
IResourceReader rs=new ResourceReader("Resource1.resx");

Программа требует наличие файла Resource1.resx

Спасибо.
Либо я найду путь, либо проложу его. © Свифт
Re: Ресурсы
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.06.02 23:57
Оценка: 13 (2)
Здравствуйте 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);
}
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Ресурсы
От: Oleg_Gashev
Дата: 08.06.02 15:31
Оценка:
Нда.
Это не Реквием Моцарта. Это смахивает на похоронный марш.
Либо я найду путь, либо проложу его. © Свифт
Re[2]: Ресурсы
От: Oleg_Gashev
Дата: 08.06.02 15:53
Оценка:
Здравствуйте 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?
Либо я найду путь, либо проложу его. © Свифт
Re[3]: Ресурсы
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.06.02 13:54
Оценка:
Здравствуйте Oleg_Gashev, Вы писали:

OG>Ok. Тогда как выудить информацию с Resource1.resx?


Незнаю.

Думаю, что этого просто не надо делать. Клади нужые ресурсы в отдельную сборку-дллку и вынимай их от туда аналогичным образом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Ресурсы
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.06.02 13:55
Оценка:
Здравствуйте Oleg_Gashev, Вы писали:

OG>Нда.

OG>Это не Реквием Моцарта. Это смахивает на похоронный марш.

Да вроде все просто. Идеология малоть поменялась, а работать стало только удебнее.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Ресурсы
От: Oleg_Gashev
Дата: 09.06.02 19:10
Оценка:
Здравствуйте VladD2, Вы писали:


VD>Да вроде все просто. Идеология малоть поменялась, а работать стало только удебнее.


Уж куда проще. Как создать dll для ресурсов? Инфы я не нашел.
Либо я найду путь, либо проложу его. © Свифт
Re[5]: Ресурсы
От: Oleg_Gashev
Дата: 09.06.02 21:04
Оценка:
Нашел на http://firststeps.ru о dll.
Либо я найду путь, либо проложу его. © Свифт
Re[5]: Ресурсы
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.06.02 22:21
Оценка:
Здравствуйте Oleg_Gashev, Вы писали:

VD>>Да вроде все просто. Идеология малоть поменялась, а работать стало только удебнее.


OG>Уж куда проще. Как создать dll для ресурсов? Инфы я не нашел.


Попробуй создать любую другую. Выброси из проекта все файлы, добавь ресурсные и пометь их как включаемые в ресурсы. Ну, а потом ЛоадАссембли и вперед...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Ресурсы
От: Шапкин Константин Юрьевич Великобритания  
Дата: 10.06.02 10:25
Оценка:
Здравствуйте Oleg_Gashev, Вы писали:

OG>Здравствуйте!

OG>Как добавить ресурсы в ехе файл и загружать их во время работы программы?

OG>Пытался делать через

OG>IResourceReader rs=new ResourceReader("Resource1.resx");
OG>
OG>Программа требует наличие файла Resource1.resx

OG>Спасибо.


Создаем Windows Forms проект. Добавляем в него файл Resource1.resx. В файле Resource1.resx создаем элемент с именем "String1". Затем пишем:

private void Form1_Load(object sender, System.EventArgs e)
{
    System.Resources.ResourceManager rm = new System.Resources.ResourceManager("WindowsApplication1.Resource1", this.GetType().Assembly);
    MessageBox.Show(rm.GetString("String1"));
}
Re: Ресурсы
От: Рек Россия  
Дата: 10.06.02 13:17
Оценка: 5 (1)
Здравствуйте Oleg_Gashev, Вы писали:

OG>Программа требует наличие файла Resource1.resx


Утилита ResEditor готовит resx-файлы из иконок, картинок, строк и imagelist'oв.
Поставляется в исходнике, как пример.

"C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\Tutorials\resourcesandlocalization\reseditor\ResEditor.cs"
Re[2]: Ресурсы
От: Igor Soukhov  
Дата: 11.06.02 05:46
Оценка:
Здравствуйте Рек, Вы писали:

Рек>Утилита ResEditor готовит resx-файлы из иконок, картинок, строк и imagelist'oв.

Рек>Поставляется в исходнике, как пример.

Рек>"C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\Tutorials\resourcesandlocalization\reseditor\ResEditor.cs"


Еще по этому адресу — http://www.codeproject.com/csharp/VSNetResourceEditor.asp
живет addin к студии.
* thriving in a production environment *
Re[2]: Ресурсы
От: Oleg_Gashev
Дата: 12.06.02 18:17
Оценка:
Здравствуйте Шапкин Константин Юрьевич, Вы писали:

ШКЮ>Здравствуйте Oleg_Gashev, Вы писали:


OG>>Здравствуйте!

OG>>Как добавить ресурсы в ехе файл и загружать их во время работы программы?

OG>>Пытался делать через

OG>>IResourceReader rs=new ResourceReader("Resource1.resx");
OG>>
OG>>Программа требует наличие файла Resource1.resx

OG>>Спасибо.


ШКЮ>Создаем Windows Forms проект. Добавляем в него файл Resource1.resx. В файле Resource1.resx создаем элемент с именем "String1". Затем пишем:


ШКЮ>
ШКЮ>private void Form1_Load(object sender, System.EventArgs e)
ШКЮ>{
ШКЮ>    System.Resources.ResourceManager rm = new System.Resources.ResourceManager("WindowsApplication1.Resource1", this.GetType().Assembly);
ШКЮ>    MessageBox.Show(rm.GetString("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
Либо я найду путь, либо проложу его. © Свифт
Re[3]: Ресурсы
От: shapkin Великобритания  
Дата: 13.06.02 06:37
Оценка: 3 (1)
Здравствуйте 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". Затем пишем:


ШКЮ>>
ШКЮ>>private void Form1_Load(object sender, System.EventArgs e)
ШКЮ>>{
ШКЮ>>    System.Resources.ResourceManager rm = new System.Resources.ResourceManager("WindowsApplication1.Resource1", this.GetType().Assembly);
ШКЮ>>    MessageBox.Show(rm.GetString("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".
Re[4]: Ресурсы
От: Oleg_Gashev
Дата: 13.06.02 19:30
Оценка:
Здравствуйте shapkin, Вы писали:


S>Этот код для нового проекта Windows Forms, с названием проекта по умолчанию, WindowsApplication1.

S>У вас, похоже, проект называется MyProject, так? Тогда надо вместо "WindowsApplication1.Resource1" написасть "MyProject.Resource1".

Нда. Спасибо. Это действительно работает.
Либо я найду путь, либо проложу его. © Свифт
Re[2]: Ресурсы
От: Konstantin Sokolovskiy  
Дата: 17.06.02 09:13
Оценка:
Здравствуйте Шапкин Константин Юрьевич, Вы писали:

ШКЮ>Создаем Windows Forms проект. Добавляем в него файл Resource1.resx. В файле Resource1.resx создаем элемент с именем "String1". Затем пишем:

ШКЮ>
ШКЮ>private void Form1_Load(object sender, System.EventArgs e)
ШКЮ>{
ШКЮ>    System.Resources.ResourceManager rm = new System.Resources.ResourceManager("WindowsApplication1.Resource1", this.GetType().Assembly);
ШКЮ>    MessageBox.Show(rm.GetString("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 проекта и наслаждаешся.
Re[3]: Ресурсы
От: shapkin Великобритания  
Дата: 17.06.02 10:02
Оценка:
Здравствуйте 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 классе? Тогда этот способ не пройдет...
Re[4]: Ресурсы
От: Konstantin Sokolovskiy  
Дата: 17.06.02 10:05
Оценка:
Здравствуйте 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 самом. Т.е. взялся абсолютно дефолтный проект, сгенерированный с нуля, и к нему был присобачен ресурс.
Re[5]: Ресурсы
От: shapkin Великобритания  
Дата: 17.06.02 10:13
Оценка:
Здравствуйте 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 самом. Т.е. взялся абсолютно дефолтный проект, сгенерированный с нуля, и к нему был присобачен ресурс.


А почему же у вас имена сборок генерятся? Если создать все по умолчанию, имя сборки будет совпадать с именем приложения.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.