从.NET Framework 4.7升级到4.8后,使用MSBuild发布项目时出现错误。

6
我正在将一个Asp.Net网站项目从4.7升级到4.8的.net框架。在升级后,项目可以从Visual Studio中成功构建,并且在本地计算机上运行没有任何问题。但是,当使用MSBuild发布相同的项目时,我会遇到以下错误: (AspNetMerge目标) ->   aspnet_merge:发生错误:合并程序集时出错:不允许未解决的程序集引用: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>

您可以看到,<UseMerge>被设置为true,这将把输出合并到单个程序集中。 我尝试禁用合并,这解决了问题,但我希望保持合并选项启用,因为它之前在发布流水线中已经配置好了。任何帮助将不胜感激。

你正在引用哪个版本的system.net.http?你的任何项目中是否有对system.net.http的nuget引用? - Jeff
2个回答

7
我通过安装Microsoft.Aspnet.Merge NuGet包(不要忘记选中预览复选框)解决了这个问题。 enter image description here

这是唯一对我有效的解决方案。我将一个Web项目转换为dotnet 4.7.2,但在合并时构建失败,提示未解析到System.Core的引用。我已将所有项目更新为4.7.2,解决了所有程序集冲突,清除了缓存,重新安装了所有NuGet包......但都无济于事。最后尝试了您的方法(感谢“包括预发布”提示)。我真的很想知道您是在哪里找到的!也许有更多关于这个主题的信息!但无论如何,谢谢您。 - Loudenvier

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. 检查 “警告” 窗口,查看某些记录,例如“找到相同依赖程序集的不同版本之间的冲突”。双击这些记录,在每个弹出窗口上按下
  6. 再次重新构建项目/解决方案

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


谢谢!这让我疯了! - Vilhelm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接