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

发布VS2022 WinForms程序后遇System.IO.FileLoadException问题求助

问题分析与解决方案

核心问题

发布后的Windows Forms程序因无法加载System.Private.Uri, Version=6.0.0.0程序集抛出FileLoadException,但在Visual Studio调试、本地管理员运行时正常,其他发布程序无此问题,且入口函数的try-catch无法捕获异常(说明异常发生在Main执行前的运行时初始化阶段)。

可能诱因

  • 发布过程中依赖项打包不完整,System.Private.Uri.dll未被正确包含到输出目录
  • 目标机器的.NET Desktop Runtime版本与项目编译/发布版本不匹配,引发程序集版本冲突
  • 发布模式(框架依赖/独立部署)的配置缺陷,导致运行时无法定位依赖组件

解决步骤

1. 检查发布依赖项完整性

  • 打开项目属性→发布→查看文件发布选项:若使用「生成单个文件」,确保勾选「包含所有依赖项」;若非单文件发布,直接检查发布输出目录中是否存在System.Private.Uri.dll
  • 若为框架依赖部署,确认目标机器已安装对应版本的.NET Desktop Runtime(例如项目基于.NET 6,则需安装.NET 6 Desktop Runtime)

2. 添加程序集绑定重定向

在项目的app.config(或发布后的YourAppName.exe.config)中添加重定向配置,让运行时自动适配可用的System.Private.Uri版本:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Private.Uri" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

若为.NET 6+项目,需在.csproj文件中启用自动生成绑定重定向:

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

3. 切换发布模式测试

  • 若当前为框架依赖发布,改为独立部署,打包所有.NET运行时组件,避免目标机器的运行版本问题
  • 若当前为独立部署,切换为框架依赖,验证目标机器的运行时是否兼容

4. 清理缓存后重新发布

在Visual Studio中依次执行:清理解决方案→生成解决方案→重新发布,清除旧缓存文件的干扰


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:55:18