2016-06-08 58 views
0

我正在寻找一种方法从可执行文件中获取图标,并创建一个使用此图标的新可执行文件(使用CSharpCodeProvider)。使用另一个程序集的图标创建可执行文件

,第一部分是容易的,我这样做是使用:

Icon icon = Icon.ExtractAssociatedIcon(path); 

的问题出现时,我想“连接”的图标。我试着使用:

compilerParameters.CompilerOptions = @"/win32icon:" 

但是这种解决方案需要的图标的文件写到,我想以避免(的原因之一是它是这样一个烂摊子,以节省超过16种颜色的图标...)。

是否可以直接在内存中使用System.Drawing.Icon对象?

编辑:只是要清楚,我试图获得一个代码,可以编译C#代码到可执行文件。这个可执行文件将只有一个图标只保存在内存中(作为Icon对象),而不是保存在文件中(作为.ico文件)。

+0

你可以使用roslyn的c#应用程序,搜索如何使用roslyn编译编译并嵌入像这样的资源http://stackoverflow.com/questions/36969090/roslyn-embedd-content-into-assembly-solved – mohsen

+0

我读过关于Roslyn和做了一些测试。我仍然无法弄清楚如何在不使用文件的情况下将图标放入生成的应用程序。 – Stud

+0

如果您已将图标设置为您的应用程序,以便它将保存在项目中的文件***。resx **中,您可以在Visual Studio的项目中的**解决方案资源管理器**中的**属性**下看到它。双击此文件* .resx。所以当你想用roslyn编译你的项目时,你必须在* .resx文件中创建***。resources **文件并将**嵌入到你的编译中。 Visual studio在编译时也做这些工作。我会回答这个.iam很忙,我现在很遗憾地写下了移动版。 – mohsen

回答

1

使用IconLibrary保存图标

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

谢谢mohsen。这个库仍然存在质量问题。我正在调查它:) – Stud

0

解决方案:

如果有人想要做同样的事情,这里是一个方法,带来了预期的结果(图标提取与正确的图形质量)。

我使用Tsuda Kageyu IconExtractor为了得到我想要的图标并将其转换为透明度的位图。 然后,我使用@mohsen建议的IconLibrary将图标作为.ico文件写入,然后将其与CompilerOptions一起嵌入。

相关问题