gpt4 book ai didi

c# - 为什么在根据 .NET Standard 编译 .NET Framework 项目时缺少此 NuGet 依赖项?

转载 作者:太空狗 更新时间:2023-10-29 21:42:36 24 4
gpt4 key购买 nike

我有一个包含 3 个项目的 Visual Studio 解决方案。

顶层是 .NET Framework 4.6.1 控制台应用程序(项目 A)。它依赖于 .NET Framework 4.6.1 类库(项目 B)。项目 B 依赖于 .NET Standard 2.0 类库(项目 C)。

我在项目 C 中有一些使用 System.Data.SqlClient(NuGet 包版本 4.6.1)的代码。

由于以下已知问题 https://github.com/dotnet/sdk/issues/901我还将 System.Data.SqlClient 作为 NuGet 依赖项添加到项目 B(.NET Framework 类库)。

这是场景 1,构建解决方案时,将 System.Data.SqlClient 复制到项目 A 的/bin/Debug 文件夹中,应用程序成功运行。

场景 1 的代码在这里 https://github.com/JamesDunlop/TestDependencyFlowsNetStandard

但是,对于方案 2,我现在添加了对项目 A 的项目引用,这样它现在也直接引用/依赖于项目 C(即 .NET 标准类库)以及项目 B。这模仿了什么我需要在遗留应用程序中执行此操作。

清理、重建和运行。现在项目A的/bin/Debug文件夹中缺少System.Data.SqlClient,运行时出现异常“System.IO.FileNotFoundException: 'Could not load file or assembly 'System.Data.SqlClient”

为什么 System.Data.SqlClient 没有被复制到/bin/Debug?

请注意,我选择不将 .NET Framework 项目迁移到 PackageReferences 以解决问题 https://github.com/dotnet/sdk/issues/901 ,因为我需要在不可行的大型遗留 ASP.NET 解决方案中实现它。

我希望添加对项目 C 的引用不会有什么影响,除了(如观察到的那样)它会导致更多类型转发 DLL 被复制到/bin/Debug 文件夹。但我不希望 System.Data.SqlClient 现在丢失。

最佳答案

我将在这里重复我上面的评论,因为它被认为是有效的答案。

MSBuild日志,其构建输出详细程度设置为级别 detailed , 对发生的事情提供更多见解。

场景一(A引用B,B引用C)

构建日志显示项目 A 成功解决了它的 System.Data.SqlClient来自 \bin\debug 的依赖项目B的文件夹并复制到本地。
(由于项目 B 是一个 .NET Framework 类库,它的 NuGet 依赖项确实被复制到它的 bin 文件夹中。)

Dependency "System.Data.SqlClient, Version=4.5.0.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Resolved file path is "C:\...\TestDependencyFlows.Library\bin\Debug\System.Data.SqlClient.dll".

场景 2(A 引用 B 和 C,B 引用 C)

构建日志提到项目 A 试图解析其 System.Data.SqlClient来自 NET Standard 的依赖项目 C(和一些众所周知的文件夹),但不再来自项目 B。
(因为项目 C 是一个 NET Standard 项目,它不会将其 NuGet 依赖项复制到其 bin 文件夹。)
所有这些尝试都失败了,并显示该文件在这些位置不存在的消息。

Dependency "System.Data.SqlClient, Version=4.5.0.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Could not resolve this reference. Could not locate the assembly "System.Data.SqlClient, Version=4.5.0.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.
For SearchPath "C:\...\TestDependencyFlows.Library.NetStandard\bin\Debug\netstandard2.0".
Considered "C:\...\TestDependencyFlows.Library.NetStandard\bin\Debug\netstandard2.0\System.Data.SqlClient.winmd", but it didn't exist.
Considered "C:\...\TTestDependencyFlows.Library.NetStandard\bin\Debug\netstandard2.0\System.Data.SqlClient.dll", but it didn't exist.
Considered "C:\...\TestDependencyFlows.Library.NetStandard\bin\Debug\netstandard2.0\System.Data.SqlClient.exe", but it didn't exist.
...

解决方案可能是添加 System.Data.SqlClient NuGet 包也到项目 A。

关于c# - 为什么在根据 .NET Standard 编译 .NET Framework 项目时缺少此 NuGet 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56697901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com