I have a Visual Studio solution, with 3 projects.
The top level is a .NET Framework 4.6.1 Console App (Project A). It depends on a .NET Framework 4.6.1 Class Library (Project B). Project B depends on a .NET Standard 2.0 Class Library (Project C).
I have some code in Project C that uses System.Data.SqlClient (NuGet package version 4.6.1).
Due to the following known issue https://github.com/dotnet/sdk/issues/901 I have also added System.Data.SqlClient as a NuGet dependency to Project B (the .NET Framework Class Library).
This is Scenario 1, and when the solution is built, System.Data.SqlClient is copied to the /bin/Debug folder of Project A and the the application runs successfully.
The code for Scenario 1 is here https://github.com/JamesDunlop/TestDependencyFlowsNetStandard
However, for Scenario 2, I now ADD a project reference to Project A such that it now also directly references/depends-on Project C (i.e. the .NET Standard Class Library), as well as Project B. This mimics what I will need to do in a legacy application.
Clean, and rebuild and run. System.Data.SqlClient is now missing from the /bin/Debug folder of Project A, and at run time there is an exception "System.IO.FileNotFoundException: 'Could not load file or assembly 'System.Data.SqlClient"
Why does the System.Data.SqlClient not get copied to /bin/Debug ?
Note that I have chosen NOT to migrate the .NET Framework projects to PackageReferences in order to resolve the issue https://github.com/dotnet/sdk/issues/901, since I need to implement this in a large legacy ASP.NET solution where it is not feasible.
I would expect that adding a reference to Project C would have little effect, other than (as observed) it results in a lot more type-forwarding DLLs being copied to the /bin/Debug folder. But I would not expect System.Data.SqlClient to now be missing.
System.Data.SqlClientNuGet package also to project A should solve it. For scenario 2, theMSBuildlog shows that it tries to resolve this dependency from projectC, which is missing there because a.NET Standardproject doesn't copy its dependencies to thebinfolder. For scenario 1,MSBuildresolves it from project B, which succeeds.