Microsoft.Data.SqlClient 5.1.2 抛出 NullReference 异常,堆栈跟踪指向引用程序集

问题描述 投票:0回答:1

我的云服务辅助角色 (.NET 4.8) 引用 NuGet 包 Microsoft.Data.SqlClient 版本 5.1.2。 该代码在本地运行良好。 Microsoft DevOps 管道构建并发布云服务工件 .cspkg 包 (

msbuild /t:publish /p:OverwriteReadOnlyFiles=true /p:IsPackaging=True ...
),然后将该工件上传到 Azure 云服务(扩展支持)资源。

现在,在 Azure 云服务上运行时,我收到两个异常

System.NullReferenceException
,其中包含这些堆栈跟踪:

System.NullReferenceException:+Object+reference+not+set+to+an+instance+of+an+object.
at Microsoft.Data.SqlClient.SqlCommand.ExecuteReader()+in+D:\a\_work\1\s\src\Microsoft.Data.SqlClient\netfx\ref\Microsoft.Data.SqlClient.cs:line+636

Unexpected+exception+in+AddBenchmarkJobRecord,+details=[System.NullReferenceException:+Object+reference+not+set+to+an+instance+of+an+object.
 at Microsoft.Data.SqlClient.SqlConnection.CreateCommand()+in+D:\a\_work\1\s\src\Microsoft.Data.SqlClient\netfx\ref\Microsoft.Data.SqlClient.cs:line+851

有趣的是,堆栈跟踪指向 Microsoft.Data.SqlClient 的引用程序集。 看来运行时会加载引用程序集并执行它,这解释了

NullReferenceExceptions
。 RDP 到 Azure 云服务资源以及程序集文件中我还找到了 Microsoft.Data.SqlClient.dll 参考程序集(仅 72KB,使用反汇编程序验证):

我发现参考程序集文件 Microsoft.Data.SqlClient.dll 是由 DevOps 管道发布的。 我试图在本地重现该内容,但没有成功 - 本地发布的 .cspkg 包包含正确的程序集文件:

问题:

  • 为什么发布的.cspkg包的内容不同?我应该去哪里解释?
  • 如何可能通过运行时加载参考程序集
  • 还有其他建议如何解决这个问题吗?

谢谢你。

msbuild .net-assembly azure-cloud-services sqlclient
1个回答
0
投票

MsBuild 版本 16(随 Visual Studio 2019 一起提供)将 参考程序集 文件 Microsoft.Data.SqlClient.dll 包含到 .cspkg 包中。但 MsBuild 版本 17(随 Visual Studio 2022 一起提供)包含“正确的”程序集文件。 DevOps 管道配置为使用构建工具 v16(

vsVersion '16.0'
,请参阅任务 VSBuild@1)。在本地,我使用 Microsoft Visual Studio 2022 和 msbuild v17。通过更新 DevOps 管道以使用
vsVersion '17.0'

解决了该问题
© www.soinside.com 2019 - 2024. All rights reserved.