You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

移植基础库到netstandard2.0后WPF net461发布版遇FileLoadException

解决WPF .NET 4.6.1调用netstandard2.0库部署后FileLoadException的问题

我之前也踩过类似的坑,给你几个实际验证有效的排查和解决方向:

  • 先确认部署机器的.NET Framework补丁情况
    .NET Framework 4.6.1本身对netstandard2.0的支持并不完善,必须安装KB3102436这个补丁才能正常识别netstandard库。调试环境因为Visual Studio自带了相关依赖所以没问题,但干净的部署机器如果没装这个补丁,就会出现这种版本匹配异常。建议把这个补丁包含到你的安装包中,或者在安装前提示用户安装。

  • 手动添加明确的netstandard绑定重定向
    自动生成的绑定重定向有时候在发布部署时会失效,你可以直接在WPF项目的App.config里手动添加如下配置:

    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="netstandard" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-2.0.3.0" newVersion="2.0.3.0" />
        </dependentAssembly>
      </assemblyBinding>
    </runtime>
    

    注意替换newVersion为你实际引用的netstandard版本,发布时一定要确认这个配置文件被正确打包到应用目录。

  • 检查基础库的发布输出完整性
    右键你的netstandard2.0基础库项目,进入「属性」→「生成」,确认目标框架确实是netstandard2.0。然后清理整个解决方案,重新生成发布版本。你还可以用ildasm.exe工具打开基础库的dll,查看manifest里的netstandard引用版本是否正确,避免出现版本不一致的情况。

  • 禁用自动绑定重定向,手动管理所有重定向
    自动绑定重定向有时候会在发布时生成错误的配置,你可以在WPF项目的.csproj文件中添加以下配置来禁用它:

    <PropertyGroup>
      <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
      <GenerateBindingRedirectsOutputType>false</GenerateBindingRedirectsOutputType>
    </PropertyGroup>
    

    之后手动维护App.config里的所有绑定重定向,确保netstandard的重定向规则是明确且正确的。

  • 再次核对安装程序的文件部署
    虽然你说已经确认文件都部署了,但还是要检查安装程序是否把netstandard.dll(通常在项目的packages\NETStandard.Library.NETFramework\2.0.3\build\net461\ref目录下)正确复制到了应用程序目录。有些安装工具会默认过滤系统相关dll,要确保没有排除netstandard相关文件。

补充一下:这个问题的本质是.NET Framework 4.6.1对netstandard2.0的支持需要特定补丁和精准的绑定重定向,调试环境因为Visual Studio的加持掩盖了问题,部署到生产环境就会暴露出来。

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

火山引擎 最新活动