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

Posted

技术标签:

【中文标题】如何在不使用 IDE 的情况下更改 C# 程序的图标?【英文标题】:How to change the icon of a C# program without using an IDE? 【发布时间】:2020-03-27 23:59:21 【问题描述】:

我有一个 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 的情况下进行操作。

【问题讨论】:

答案在您发布的链接中:您可以在 .csproj 文件中创建另一个 节点,例如<PropertyGroup> <applicationicon>myicon.ico</applicationicon> </PropertyGroup> .ico 文件应与您的 .csproj、.cs 等文件位于同一文件夹中 @Diado 我确实试过了。我创建了一个项目文件Settings.csproj 并尝试将其添加到最后的编译... "Source code.cs" "Settings.csproj" 但它抛出了错误CS0116 【参考方案1】:

经过一段时间的反复试验,我设法让它与 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 会被忽略,但后来我发现我可以改用 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"

【讨论】:

不错的解决方案,无需使用第三方软件作为资源黑客。只是一个旁注......“Program.exe”和“Source code.cs”不需要在引号之间出现,也不需要完整的网络路径。重要的是:execsico 文件必须全部位于同一目录中,不一定在驱动器 c 中。在 Visual Studio 中,转到工具>命令行>DOS 提示符。在那里,输入:csc -out:myfilename.exe -target:winexe -win32icon:myiconname.ico myVisualStudiofilename.cs @LuizVaughan 谢谢。 IIRC,我正在使用 Windows 附带的编译器通过 Windows PowerShell 编译文件,看看我可以在不需要安装任何东西(例如 Visual Studio)的情况下做什么。【参考方案2】:

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

【讨论】:

据我了解,这是一个可以更改任何可执行文件图标的应用程序,对吗?如果是这样,那么它可能是一个解决方案,但我会先看看是否有办法在没有外部工具的情况下以编程方式完成。 确实如此。这是一个修改DLL和EXE的程序 @user7393973 没有办法“没有工具”。要么你得到一个,要么你自己的程序一个。您想如何在不使用软件的情况下修改文件?那是不可能的。如果您说“没有 IDE”,您会说“我只想使用命令行工具”。对吗? @Holger 我想我说得不够清楚以至于造成了一些误解。我要找的不是在将代码编译成可执行程序后如何更改图标,而是如何更改之前的图标。很抱歉造成混乱。【参考方案3】:

如果您需要编程解决方案,可以使用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");

【讨论】:

以上是关于如何在不使用 IDE 的情况下更改 C# 程序的图标?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 inotifywait 的情况下监视目录的文件更改?

PyCharm:如何在不使用鼠标滚动缩放的情况下更改字体大小?

C# - 如何在不改变 DateTime 格式的情况下改变文化

如何在不更改修改后的时间戳的情况下签入文件?

在不更改 Windows 区域设置的情况下更改应用程序的区域设置

在不使用代码的情况下更改 Windows 区域设置/文化