You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 5发布版EXE图标无法更新问题求助

.NET 5 WPF发布版图标未更新的解决方案

问题背景

基于.NET 5开发的WPF应用,将占位图标LogoTemp替换为正式图标Logo.ico后,调试版可正常显示新图标,但发布版始终保留旧图标。已尝试通过项目属性修改、直接编辑.csproj文件指定图标路径,均未解决问题。

项目.csproj内容如下:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net5.0-windows</TargetFramework>
    <RootNamespace>LPG_Launcher</RootNamespace>
    <UseWPF>true</UseWPF>
    <Company>LowPoly Games</Company>
    <Authors>LowPoly Games</Authors>
    
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <PlatformTarget>x64</PlatformTarget>
    <DebugType>none</DebugType>
    <DebugSymbols>false</DebugSymbols>
    <TransformOnBuild>true</TransformOnBuild>
    <OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
    <TransformOutOfDateOnly>false</TransformOutOfDateOnly>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <Optimize>true</Optimize>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <DebugType>full</DebugType>
    <DebugSymbols>true</DebugSymbols>
    <PlatformTarget>x64</PlatformTarget>
    <TransformOnBuild>true</TransformOnBuild>
    <OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
    <TransformOutOfDateOnly>false</TransformOutOfDateOnly>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <DebugType>full</DebugType>
    <DebugSymbols>true</DebugSymbols>
    <TransformOnBuild>true</TransformOnBuild>
    <OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
    <TransformOutOfDateOnly>false</TransformOutOfDateOnly>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <PlatformTarget>x64</PlatformTarget>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <DebugType>none</DebugType>
    <DebugSymbols>false</DebugSymbols>
    <PlatformTarget>x64</PlatformTarget>
    <TransformOnBuild>true</TransformOnBuild>
    <OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
    <TransformOutOfDateOnly>false</TransformOutOfDateOnly>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <Optimize>true</Optimize>
  </PropertyGroup>

  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Exec Command="&quot;$(ProjectDir)..\Build Assistant\bin\Release\Build Assistant.exe&quot; &quot;MakeDir$(ConfigurationName)&quot;&#xD;&#xA;if $(ConfigurationName) == Release (&#xD;&#xA;   del /S *.pdb&#xD;&#xA;   &quot;$(ProjectDir)..\Build Assistant\bin\Release\Build Assistant.exe&quot; &quot;MoveGames&quot;&#xD;&#xA;  &#xD;&#xA;   &quot;$(ProjectDir)..\Build Assistant\bin\Release\Build Assistant.exe&quot; &quot;CheckInstallers&quot;&#xD;&#xA;)" />
  </Target>

  <PropertyGroup>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <TransformOnBuild>true</TransformOnBuild>
    <OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
    <TransformOutOfDateOnly>false</TransformOutOfDateOnly>
    <PackageIcon></PackageIcon>
    <PackageIconUrl />
    <ApplicationIcon>Logo.ico</ApplicationIcon>
    <StartupObject />
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="Installer\BuildAssistant.cs" />
    <Compile Remove="Installer\InstallerVersionControl.cs" />
  </ItemGroup>

  <ItemGroup>
    <None Remove="Fonts\BebasNeueBold.ttf" />
    <None Remove="Installer\BuildAssistant.exe" />
    <None Remove="Installer\InstallerVersionControl.exe" />
    <None Remove="Resources\Close.png" />
    <None Remove="Resources\FG.png" />
    <None Remove="Resources\GHGLogo.png" />
    <None Remove="Resources\HCPlus" />
    <None Remove="Resources\HCPlus.png" />
    <None Remove="Resources\ISPLogo.png" />
    <None Remove="Resources\Logo.ico" />
    <None Remove="Resources\Minimise.png" />
  </ItemGroup>

  <ItemGroup>
    <COMReference Include="{d37e2a3e-8545-3a39-9f4f-31827c9124ab}">
      <WrapperTool>tlbimp</WrapperTool>
      <VersionMinor>4</VersionMinor>
      <VersionMajor>2</VersionMajor>
      <Guid>d37e2a3e-8545-3a39-9f4f-31827c9124ab</Guid>
    </COMReference>
  </ItemGroup>
  
  <ItemGroup>
    <None Include="VersionAutoIncrementer.tt">
      <Generator>TextTemplatingFileGenerator</Generator>
      <LastGenOutput>VersionAutoIncrementer.txt</LastGenOutput>
    </None>
  </ItemGroup>

  <ItemGroup>
    <Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
  </ItemGroup>

  <ItemGroup>
    <Folder Include="GameData\" />
  </ItemGroup>

  <ItemGroup>
    <Resource Include="Fonts\BebasNeueBold.ttf">
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    </Resource>
    <Resource Include="Resources\Close.png" />
    <Resource Include="Resources\FG.png" />
    <Resource Include="Resources\GHGLogo.png" />
    <Resource Include="Resources\HCPlus.png" />
    <Resource Include="Resources\ISPLogo.png" />
    <Resource Include="Resources\Logo.ico" />
    <Resource Include="Resources\Minimise.png" />
  </ItemGroup>

  <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v16.0\TextTemplating\Microsoft.TextTemplating.targets" />

  <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="if $(ConfigurationName) == Release (&#xD;&#xA;   &quot;$(ProjectDir)..\Build Assistant\bin\Release\Build Assistant.exe&quot; &quot;CleanDir$(ConfigurationName)&quot;&#xD;&#xA;)" />
  </Target>

</Project>

排查与解决步骤

  • 彻底清理构建缓存
    发布版构建缓存可能残留旧图标,执行以下操作:

    1. 手动删除项目根目录下的bin和obj文件夹
    2. 在Visual Studio中依次点击生成>清理解决方案,再重新生成发布版本
  • 验证图标路径与属性
    从.csproj看,ApplicationIcon已设置为Logo.ico,但需确认:

    • 图标文件路径正确:如果Logo.ico在Resources文件夹下,应将ApplicationIcon改为Resources\Logo.ico
    • 图标文件的生成操作:在Visual Studio中选中Logo.ico,右键选择属性,设置生成操作为Resource,复制到输出目录为不复制
  • 检查PostBuild脚本的影响
    项目的PostBuild事件调用了外部工具Build Assistant.exe,其中MoveGames和CheckInstallers操作可能会修改或替换最终生成的EXE文件,导致旧图标被恢复。需要验证该工具的具体行为,确认其不会覆盖EXE的图标资源。

  • 为发布配置单独指定图标
    在发布版的PropertyGroup中显式添加ApplicationIcon属性,确保发布配置优先使用指定图标:

    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
      <!-- 保留原有属性 -->
      <ApplicationIcon>Resources\Logo.ico</ApplicationIcon> <!-- 根据实际路径调整 -->
    </PropertyGroup>
    
  • 检查图标文件完整性
    确认Logo.ico包含所有必要的尺寸(16x16、32x32、48x48、256x256),部分系统或发布流程会因图标尺寸不全而 fallback 到旧图标资源。

内容的提问来源于stack exchange,提问作者Istalri Skolir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:25:21