如何在不使用 IDE 的情况下更改 C# 程序的图标?

How to change the icon of a C# program without using an IDE?

我有一个 C# 文件 (Source code.cs),我使用 Microsoft 的编译器将其与 PowerShell 文件 (Compile.ps1) 一起编译:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe -out:"Program.exe" -target:winexe "Source code.cs"

它创建可执行文件 Program.exe

如何更改它的图标? 运行 程序时出现在任务栏中的可执行文件的图标。我在同一文件夹中有 Icon.ico

我只发现 this page 问了同样的问题,但我不太明白。

请注意,我是在具体询问如何在没有任何 IDE 的情况下做到这一点。

您可以使用 "Resource Hacker"。 Resource Hacker 是 32 位和 64 位 Windows 应用程序的资源编辑器。它既是资源编译器(用于 .rc 文件),又是反编译器 - 允许查看和编辑可执行文件中的资源(.exe;*.dll;.scr;等)和编译资源库(.res,*.mui)。虽然 Resource Hacker 主要是一个 GUI 应用程序,但它也提供了许多从命令行编译和反编译资源的选项。

经过一段时间的反复试验,我设法让它与 Settings.csproj 文件一起工作:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Compile">
    <Csc OutputAssembly="Program.exe" Sources="Source code.cs" TargetType="WinExe" Win32Icon="Icon.ico"/>
  </Target>
</Project>

我不明白为什么要改用 PropertyGroup would get ignored but then I found I could use Csc's parameters

然后可以用csc.exe编译:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe "Settings.csproj"

MSBuild.exe:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe "Settings.csproj"

这很好,以防我需要更改其他项目属性,但现在我从 运行 的控制台输出中找到了一个更简单的解决方案,上面是我可以简单地使用 -win32icon compiler option:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe -out:"Program.exe" -target:winexe -win32icon:Icon.ico "Source code.cs"

如果您需要程序化解决方案,可以使用 Ressy。它是一个用于管理 PE 文件中的本机资源的库。

要更改图标,您可以这样做:

using Ressy;
using Ressy.HighLevel.Icons;

var portableExecutable = new PortableExecutable("path/to/program.exe");
portableExecutable.RemoveIcon();
portableExecutable.SetIcon("path/to/new_icon.ico");