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

.NET 4迁移至.NET 6后程序集文件路径异常问题

.NET 6 WinForms项目Assembly.Location返回DLL而非EXE的解决方法

问题根源

.NET 6+的Windows Forms框架依赖项目默认会生成一个轻量级存根EXE(如myproject.exe),它仅负责加载并启动实际的程序集myproject.dll。因此Assembly.GetExecutingAssembly().Location会返回DLL的路径,PostBuild事件中若直接输出文件,也会看到DLL是核心输出文件。

解决配置

根据需求选择以下方案:

方案1:生成独立自包含EXE

在.csproj的<PropertyGroup>中添加以下配置,发布后会生成不依赖.NET运行时的单文件EXE,此时Assembly.GetExecutingAssembly().Location将指向该EXE:

<PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWindowsForms>true</UseWindowsForms>
    <ImplicitUsings>enable</ImplicitUsings>
    
    <!-- 新增配置 -->
    <PublishSingleFile>true</PublishSingleFile>
    <SelfContained>true</SelfContained>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier> <!-- 按需替换为win-x86/win-arm64 -->
</PropertyGroup>

方案2:框架依赖模式下获取EXE路径(推荐)

如果不想改为自包含发布,官方推荐使用Environment.ProcessPath获取当前进程的EXE路径,这是更可靠的方式。若需在PostBuild事件中操作EXE,直接使用$(TargetPath)变量,它会直接指向生成的EXE文件路径。

补充:.NET 7+专属配置

若使用.NET 7或更高版本,可开启UseAppHost确保存根EXE生成,但注意这不会改变Assembly.Location的返回值(仍指向DLL):

<PropertyGroup>
    <UseAppHost>true</UseAppHost>
</PropertyGroup>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:47:13