【问题标题】:Error in publishing project with MSBuild after upgrading from .Net Framework 4.7 to 4.8从 .Net Framework 4.7 升级到 4.8 后使用 MSBuild 发布项目时出错
【发布时间】:2020-01-08 15:32:29
【问题描述】:

我正在将一个 Asp.Net 网站项目从 4.7 升级到 .net 框架 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>

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

【问题讨论】:

  • 您引用的是哪个版本的 system.net.http?您的项目中是否有对 system.net.http 的 nuget 引用?

标签: c# asp.net .net msbuild .net-4.8


【解决方案1】:

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

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

最有可能导致此类错误的原因

这很可能是配置文件的&lt;dependencyAssemblies&gt; 部分。在项目 .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 版本,所有依赖项均已更新。错误必须消失。

【讨论】:

  • 谢谢!这让我发疯了!
【解决方案2】:

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

【讨论】:

  • 这是唯一对我有用的解决方案。我已经将一个 Web 项目转换为 dotnet 4.7.2,并且在合并时构建将失败,并且未解决对 System.Core 的引用。我已经将所有项目更新到 4.7.2,解决了所有程序集冲突,清除了缓存,重新安装了所有 nuget 包......一切都无济于事。最后尝试了您的方法(感谢“包含预发布”提示)。我真的很想知道你在哪里找到这个!也许有更多关于这个主题的信息!不过还是谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
  • 2022-11-12
  • 2022-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多