我有一个 Visual Studio 解决方案,有 3 个项目。
顶层是 .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 类库)。
这是场景一,当构建解决方案时,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 现在丢失。