ASP.NET Core自包含部署缺失System.Net.Http.Formatting.dll求助
System.Net.Http.Formatting.dll的问题 我之前也碰到过类似的坑,Microsoft.AspNet.WebApi.Client这个包的结构确实有点特殊,导致自包含发布时容易漏掉它的核心DLL。下面是几个亲测有效的解决步骤:
先确认基础配置没出错
首先检查你的项目文件(.csproj)里是否正确引用了该包,确保没有额外的排除或条件限制:<PackageReference Include="Microsoft.AspNet.WebApi.Client" Version="5.2.6" />另外你提到winx64目录体积小很多,大概率是之前的发布没有真正启用自包含模式。正确的发布命令应该是:
dotnet publish -c Release -r win-x64 --self-contained true也可以直接在项目文件里提前配置自包含参数,避免每次命令行输入:
<PropertyGroup> <SelfContained>true</SelfContained> <RuntimeIdentifier>win-x64</RuntimeIdentifier> <PublishSingleFile>false</PublishSingleFile> <!-- 不需要单文件发布的话保留这个配置 --> </PropertyGroup>强制复制缺失的DLL到发布目录
这个包的System.Net.Http.Formatting.dll放在lib/netstandard2.0子目录下,.NET的发布系统有时候不会自动识别并包含它。我们可以在项目文件里添加手动复制规则,强制把这个DLL带到发布目录:<ItemGroup> <Content Include="$(NuGetPackageRoot)microsoft.aspnet.webapi.client\5.2.6\lib\netstandard2.0\System.Net.Http.Formatting.dll"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </Content> </ItemGroup>$(NuGetPackageRoot)是NuGet包的默认安装路径(一般是C:\Users\[你的用户名]\.nuget\packages),如果你的NuGet路径自定义过,可以替换成对应的绝对路径。清理缓存后重新发布
有时候项目的构建缓存会导致依赖没有被正确更新,执行以下命令彻底清理后再发布,能避免很多奇怪的问题:dotnet clean dotnet restore dotnet publish -c Release -r win-x64 --self-contained true备选方案:升级包或替换依赖
如果上面的方法都不生效,可以尝试把Microsoft.AspNet.WebApi.Client升级到最新稳定版(比如5.2.9),新版本对.NET Core的兼容性更好,可能已经修复了自包含发布的依赖问题。另外,也可以考虑改用官方的System.Net.Http.Json来处理HTTP请求序列化,避免依赖这个较老的包。
至于你尝试的<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>,这个属性主要是用来禁用ASP.NET Core的目标依赖清单过滤,一般是解决SDK相关依赖缺失的问题,对第三方NuGet包的特殊结构依赖无效,所以没起作用也正常。
内容的提问来源于stack exchange,提问作者user10058046

