添加某些 nuget 包后,Biztalk 2020 构建失败并出现 AddBizTalkHiddenReferences

Posted

技术标签:

【中文标题】添加某些 nuget 包后,Biztalk 2020 构建失败并出现 AddBizTalkHiddenReferences【英文标题】:Biztalk 2020 Build fails with AddBizTalkHiddenReferences after adding certain nuget packages 【发布时间】:2021-10-24 20:33:06 【问题描述】:

复制步骤:

堆栈:Windows 10、Visual Studio 2019 专业版、BizTalk Server 2020 开发者版 CU1。 在 Visual Studio 中创建一个新的 Biztalk 服务器项目 管理 Nuget 包,添加一个 nuget 包。选一个: 已知会破坏构建 autofac 6.0、6.1、6.2 nodatime 3.0.5 Azure.Storage.Blobs 12.9.1 已知不会破坏构建 autofac 5.2 我测试了许多其他人。 F6(构建)或运行 msbuild

就我的测试而言,只要 nuget 包直接列出具有 .net 框架的变体作为依赖项,它就可以工作。如上表所示,仅将 .net 标准和 .net 5 作为依赖项列出,构建失败。

实际错误:

PS C:\code\autofacRepro> msbuild
Microsoft (R) Build Engine version 16.11.0+0538acc04 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

Building the projects in this solution one at a time. To enable parallel build, please add the "-m" switch.
Build started 8/24/2021 3:01:10 PM.
Project "C:\code\autofacRepro\autofacRepro.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
  Building solution configuration "Debug|Any CPU".
Project "C:\code\autofacRepro\autofacRepro.sln" (1) is building "C:\code\autofacRepro\autofacRepro.btproj" (2) on node 1 (default targets).
C:\Program Files (x86)\MSBuild\Microsoft\BizTalk\BizTalkCommon.targets(190,9): error MSB4018: The "AddBizTalkHiddenReferences" task failed unexpectedly. [C:\code\autofacRepro\autofacRepro.btproj]
C:\Program Files (x86)\MSBuild\Microsoft\BizTalk\BizTalkCommon.targets(190,9): error MSB4018: System.ArgumentException: String cannot have zero length. [C:\code\autofacRepro\autofacRepro.btproj]
C:\Program Files (x86)\MSBuild\Microsoft\BizTalk\BizTalkCommon.targets(190,9): error MSB4018:    at System.Reflection.AssemblyName..ctor(String assemblyName) [C:\code\autofacRepro\autofacRepro.btproj]
C:\Program Files (x86)\MSBuild\Microsoft\BizTalk\BizTalkCommon.targets(190,9): error MSB4018:    at Microsoft.VisualStudio.BizTalkProject.BuildTasks.AddBizTalkHiddenReferences.GetAssemblyNamesFromItems(ITaskItem[] items) [C:\co
de\autofacRepro\autofacRepro.btproj]
C:\Program Files (x86)\MSBuild\Microsoft\BizTalk\BizTalkCommon.targets(190,9): error MSB4018:    at Microsoft.VisualStudio.BizTalkProject.BuildTasks.AddBizTalkHiddenReferences.Execute() [C:\code\autofacRepro\autofacRepro.btproj
]
C:\Program Files (x86)\MSBuild\Microsoft\BizTalk\BizTalkCommon.targets(190,9): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [C:\code\autofacRepro\autofacRep
ro.btproj]
C:\Program Files (x86)\MSBuild\Microsoft\BizTalk\BizTalkCommon.targets(190,9): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() [C:\code\autofacRepro\autofacRepro.btproj]
Done Building Project "C:\code\autofacRepro\autofacRepro.btproj" (default targets) -- FAILED.

Done Building Project "C:\code\autofacRepro\autofacRepro.sln" (default targets) -- FAILED.

Build FAILED.

this github issue 中提供了一个 repro zip 包。 (起初我认为这是 autofac 的一个特殊问题,但事实并非如此)

我的旧堆栈(windows server 2016、visual studio 2015、biztalk 2016)不受影响。我们在那里的 biztalk 项目中使用 autofac 6.1 没有任何问题。

我觉得这是一个 BizTalk 错误,但我不够聪明,无法找到 Microsoft 允许报告它的方式。

所以最后的问题是,是否有解决方法或错误修复?

【问题讨论】:

【参考方案1】:

我已经用我自己的一个包裹收到了这个。这个包的目标是 .NET Standard 2.0。我必须在类库中专门添加 .NET Framework 4.8(在我的情况下)作为目标框架并为其重新创建包。

对于公共包,您可能需要创建 PR 或创建分支以包含 .NET Framework 的目标。然后,您的 BizTalk 项目需要引用 .NET Framework 程序集而不是 .NET Standard 程序集。

【讨论】:

以上是关于添加某些 nuget 包后,Biztalk 2020 构建失败并出现 AddBizTalkHiddenReferences的主要内容,如果未能解决你的问题,请参考以下文章

VS项目中使用Nuget还原包后编译生产还一直报错?

BizTalk 映射器不显示驻留在其他程序集中的外部数据结构类型的元素

类库项目无法安装某些nuget包

从命令行添加Nuget对VS项目包的引用

从 Nuget 安装添加对 bin 目录的引用

JSON 编码器生成 JSON 消息在 BizTalk 2016 中添加空引号字符