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.SqlClient
NuGet package also to project A should solve it. For scenario 2, theMSBuild
log shows that it tries to resolve this dependency from projectC
, which is missing there because a.NET Standard
project doesn't copy its dependencies to thebin
folder. For scenario 1,MSBuild
resolves it from project B, which succeeds. – Boswall