鉴于我正在使用AssemblyBuilder生成exe应用程序,如何为其设置图标?
我想我应该使用
System.Reflection.Emit.AssemblyBuilder.DefineUnmanagedResource
有一个例子怎么做?
http://msdn.microsoft.com/en-us/library/aa380599(VS.85).aspx
答案 0 :(得分:2)
您还可以在使用Win32资源API BeginUpdateResource,UpdateResource和EndUpdateResource保存EXE后更改图标。请参阅Change WPF Assembly Icon from Code(不是WPF特定的)。
答案 1 :(得分:1)
是的,你需要DefineUnmanagedResource()。您传递的文件必须是.RES文件格式。这需要rc.exe Windows SDK工具。要创建一个,首先要创建一个名为test.rc的文本文件,其中包含以下内容:
100 ICON test.ico
其中test.ico是包含图标的文件的名称。启动Visual Studio命令提示符并使用此命令
rc test.rc
创建一个test.res文件。将其路径传递给DefineUnmanagedResource(),最终的.exe包含图标资源。
请注意,这不是验证实际,目标计算机可能不会安装Windows SDK,您无法重新分发rc.exe。但是你可以分发.res文件。
答案 2 :(得分:-1)
您需要通过定义IResourceWriter
来设置ResourceManager并写入它,然后根据MSDN中的文档读取图标作为字节并设置它,我猜代码会看起来像这样,因为我之前没有这样做,从代码示例判断,保存程序集后,添加非托管资源并将其命名为'app.ico':
// Defines a standalone managed resource for this assembly. IResourceWriter myResourceWriter = myAssembly.DefineResource("myResourceIcon", "myResourceIcon.ico", "MyAssemblyResource.resources", ResourceAttributes.Public); myResourceWriter.AddResource("app.ico", "Testing for the added resource"); myAssembly.Save(myAssembly.GetName().Name + ".dll"); // Defines an unmanaged resource file for this assembly. bool bSuccess = false; byte[] iconB = null; using (System.IO.FileStream fStream = new FileStream("icon.ico", FileMode.Open, FileAccess.Read)){ iconB = new byte[(int)fStream.Length]; int nRead = fStream.Read(out iconB, 0, iconB.Length); if (nRead == iconB.Length) bSuccess = true; } if (bSuccess){ myAssembly.DefineUnmanagedResource(iconB); }