2016-06-08 4 views
0

Я ищу способ сделать значок из исполняемого файла и создать новый исполняемый файл (используя CSharpCodeProvider), который использует этот значок.Создание исполняемого файла с иконкой из другой сборки

Первая часть легко, я делаю это с помощью:

Icon icon = Icon.ExtractAssociatedIcon(path); 

Проблемы возникают, когда я хочу, чтобы «пристроить» значок. Я попытался с помощью:

compilerParameters.CompilerOptions = @"/win32icon:" 

Но это решение требует значок, чтобы записать в файл, и я хотел бы избежать этого (одна из причин того, что такой беспорядок, чтобы сохранить значок с более чем 16 цветов ...).

Возможно ли использовать объект System.Drawing.Icon в памяти напрямую?

EDIT: Чтобы быть ясным, я пытаюсь получить код, который может скомпилировать код C# в исполняемый файл. Этот исполняемый файл будет иметь значок, который сохраняется только в памяти (как объект Icon), а не в файле (в виде файла .ico).

+0

Вы можете использовать приложение C# с roslyn, искать, как строить компиляцию с roslyn и вставлять ресурсы, подобные этому http://stackoverflow.com/questions/36969090/roslyn-embedd-content-into-assembly-solved – mohsen

+0

Я читал о Roslyn и сделал некоторый тест. Я все еще не могу понять, как поместить значок в сгенерированное приложение, не используя файл. – Stud

+0

Если вы установили значок в приложение, чтобы он сохранил файл ***. Resx ** в вашем проекте. Вы можете увидеть его в ** Свойства ** в ** Обозреватель решений ** в своем проекте в Visual Studio , дважды щелкнув этот файл * .resx. поэтому, когда вы хотите скомпилировать свой проект с помощью roslyn, вы должны перед созданием *** ресурсов ** файла из * .resx-файла и ** embed ** в вашу компиляцию. Visual Studio тоже делает эту работу при компиляции. Я отвечу на этот .iam занят, и я написал к сожалению, к сожалению, сейчас. – mohsen

ответ

1

Используйте IconLibrary для сохранения Icon

Icon icon = Icon.ExtractAssociatedIcon(@"C:\Windows\System32\notepad.exe"); 
MultiIcon mIcon = new MultiIcon(); 
SingleIcon sIcon = mIcon.Add("notepad"); 
sIcon.CreateFrom(icon.ToBitmap(), IconOutputFormat.Vista); 
sIcon.Save(@"c:\notepad.ico"); 

И использовать это для CompilerOptions

Больше информации

https://msdn.microsoft.com/en-us/library/2aaxe43f.aspx

+0

Thank you mohsen. Есть еще проблемы с качеством этой библиотеки. Я изучаю это :) – Stud

0

Решение:

В случае, если кто-то хочет сделать то же самое, вот метод, который принес ожидаемый результат (извлечение значка с правильным графическим качеством).

Я использую Tsuda Kageyu IconExtractor, чтобы получить значок, который я хочу, и преобразовать его в растровое изображение с прозрачностью. Затем я использую IconLibrary, предложенный @mohsen для записи в виде файла .ico, а затем вставлять его в CompilerOptions.

 Смежные вопросы

  • Нет связанных вопросов^_^