понедельник, сентября 03, 2007

Как вытащить иконку из ресурса

Недавно спрашивали у меня subj. Поскольку с формами я давненько не работал пришлось порыться в запасниках старого кода.
Итак, сначала, как внедрить иконку в ресурс сборки. Нет ничего проще. Добавляете файл иконки в проект Visual Studio. В свойствах файла меняете значение "Build action" на "Embeded resource". Все, при компиляции иконка будет добавлена как ресурс сборки.
Для того, чтобы извлечь иконку из ресурса используем метод Assembly.GetManifestResourceStream(string). Приведенный ниже код демонстрирует (а) как получить ссылку на сборку, (б) как извлечь иконку из ресурса сборки


namespace ResourceIcon
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void btnShowIcon_Click(object sender, EventArgs e)
{
Assembly assembly = Assembly.GetAssembly(typeof(Form1));
//Assembly assembly = this.GetType().Assembly;
using (Stream stream = assembly.GetManifestResourceStream("ResourceIcon.factory.ico"))
{
this.Icon = new Icon(stream);
}
}
}
}



Все очень просто. Сложности могут возникнуть с именем внедренного ресурса. Студия формирует имя ресурса так: берется Default Namespace, указанный в свойствах проекта и через точку добавляется имя файла. В крайнем случае, вы можете скомпилировать проект и затем открыть полученный .exe или .dll файл в ildasm.exe и посмотреть в манифесте сборки имя нужного вам ресурса.

2 комментария:

Анонимный комментирует...

Есть одно НО!
При запуске такого приложения с сетевого диска рисует стандартную иконку и сообщает:
Microsoft .NET Security Information
This application is running in a partially trusted context. Some functionality in the application may be disabled due to security restrictions.

Не подскажете куда копать?

Sergey Rozovik комментирует...

Копать надо в сторону "partially trusted context" и "Code access security".