从 .Net Framework 4.7 升级到 4.8 后使用 MSBuild 发布项目时出错

vin*_*inu 5 .net c# asp.net msbuild .net-4.8

我正在将一个 Asp.Net 网站项目从 4.7 升级到 .net framework 4.8。升级后,项目从visual studio成功构建,并且在本地机器上运行也没有任何问题。当使用 MSBuild 发布同一个项目时,我收到以下错误: (AspNetMerge target) -> aspnet_merge : error occurred: An error occurred when merging assemblies: Unresolved assembly reference not allowed: System.Net.Http.

使用的 MsBuild 命令是: msbuild.exe "D:\Enterprise\Enterprise.sln" /nologo /nr:false /t:Build /p:DeployOnBuild=true /p:Configuration=Release /p:PublishProfile=VSO

此处引用的 VSO.pubxml 文件具有以下配置:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <publishUrl>..\..\Publish\Web</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
    <PrecompileBeforePublish>True</PrecompileBeforePublish>
    <EnableUpdateable>False</EnableUpdateable>
    <DebugSymbols>False</DebugSymbols>
    <WDPMergeOption>MergeAllOutputsToASingleAssembly</WDPMergeOption>
    <UseMerge>True</UseMerge>
    <SingleAssemblyName>MergedAssembly</SingleAssemblyName>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

您可以看到<UseMerge>设置为true将输出合并到单个程序集。我尝试通过完全禁用合并来解决问题,但我想保持合并选项处于启用状态,因为它在之前的发布管道中以这种方式配置。任何帮助将不胜感激。

pic*_*ino 6

System.Net.Http是一个给普通开发人员带来很多问题的库。在 NuGet 包更新或针对新的 .NET Framework 后,它会出现许多令人难以置信的问题。

不幸的是,没有解决所有这些问题的灵丹妙药。这取决于真正导致此错误的许多因素。

什么最有可能导致此类错误

这很可能是配置文件的<dependencyAssemblies>部分。项目 .NET Framework 重定向后,存在无法使用旧版本的依赖项程序集解析的 NuGet 包。

你可以尝试什么

使用以下工作流程在新的 .NET Framework 版本上重新定位您的项目:

  1. 更改项目/解决方案中的 .NET Framework 版本
  2. 更新 NuGet 包(在包管理器控制台中update-package:)
  3. 重新安装 NuGet 包(在包管理器控制台中update-package -reinstall:)
  4. 重建项目/解决方案
  5. 检查Warnings窗口中的某些记录,例如Found conflicts between different versions of the same dependent assembly. 双击这些记录并按Yes每个弹出窗口。
  6. 再次重建项目/解决方案

现在,您的项目已正确地在新的 .NET Framework 版本上重新定位,并更新了所有依赖项。并且错误必须消失。


小智 5

我已经通过安装 Microsoft.Aspnet.Merge NuGet 包解决了这个问题(不要忘记点击预览复选框)。

在此处输入图片说明