biztalk - 添加某些 nuget 包后,Biztalk 2020 Build 失败并出现 AddBizTalkHiddenReferences
问题描述
复制步骤:
- 堆栈:Windows 10、Visual Studio 2019 专业版、BizTalk Server 2020 开发者版 CU1。
- 在 Visual Studio 中创建一个新的 Biztalk 服务器项目
- 管理 Nuget 包,添加一个 nuget 包。选一个:
- 已知会破坏构建
- 自动法 6.0、6.1、6.2
- nodatime 3.0.5
- Azure.Storage.Blobs 12.9.1
- 已知不会破坏构建
- 自动法 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.
此 github 问题中提供了一个 repro zip 包。(起初我认为这是 autofac 的一个特殊问题,但事实并非如此)
我的旧堆栈(windows server 2016、visual studio 2015、biztalk 2016)不受影响。我们在那里的 biztalk 项目中使用 autofac 6.1 没有任何问题。
我觉得这是一个 BizTalk 错误,但我不够聪明,无法找到 Microsoft 允许报告它的方式。
所以最后的问题是,是否有解决方法或错误修复?
解决方案
我用我自己的包裹之一吃过这个。这个包的目标是 .NET Standard 2.0。我必须在类库中专门添加 .NET Framework 4.8(在我的情况下)作为目标框架并为其重新创建包。
对于公共包,您可能希望创建一个 PR 或创建一个 fork 以包含 .NET Framework 的目标。然后,您的 BizTalk 项目需要引用 .NET Framework 程序集而不是 .NET Standard 程序集。
推荐阅读
- reactjs - React - 多次渲染组件
- amazon-dynamodb - Dynamodb:List 属性索引和查询 NOT_CONTAINS
- java - 如何验证调用是在我的方法中的特定列表上进行的?
- ruby - 如何在嵌套数组中获取两个坐标?
- angular - 显示来自本地存储的当前数据
- python - 表单输入的 Python Flask 循环组
- python - 没有名为“nets”的模块
- x86 - 如何退出内联汇编程序?
- python - 在 Python 中获取 Voronoi 单元的区域、边长和邻域
- selenium - 在 Raspberry Pi 4 上将 Chromium 配置文件加载到 Selenium