У меня есть решение Visual Studio с 3 проектами.
Верхний уровень - это консольное приложение .NET Framework 4.6.1 (проект A). Это зависит от библиотеки классов .NET Framework 4.6.1 (проект B). Проект B зависит от библиотеки классов .NET Standard 2.0 (проект C).
У меня есть код в Project C, который использует System.Data.SqlClient (пакет NuGet версии 4.6.1).
Из-за следующей известной проблемы https://github.com/dotnet/sdk/issues/901 Я также добавил System.Data.SqlClient в качестве зависимости NuGet в Project B (библиотека классов .NET Framework).
Это сценарий 1, и когда решение построено, System.Data.SqlClient копируется в папку / bin / Debug проекта A, и приложение запускается успешно.
Код для сценария 1 находится здесь https://github.com/JamesDunlop/TestDependencyFlowsNetStandard
Однако для сценария 2 я теперь ДОБАВЛЯЮ ссылку на проект в Project A, так что теперь он также напрямую ссылается / зависит от Project C (т.е. библиотеки стандартных классов .NET), а также Project B. Это имитирует то, что мне нужно. сделать в устаревшем приложении.
Очистите, восстановите и запустите. System.Data.SqlClient теперь отсутствует в папке / bin / Debug проекта A, и во время выполнения возникает исключение "System.IO.FileNotFoundException: 'Не удалось загрузить файл или сборку' System.Data.SqlClient"
Почему System.Data.SqlClient не копируется в / bin / Debug?
Обратите внимание, что я решил НЕ переносить проекты .NET Framework в PackageReferences, чтобы решить проблему https://github.com/dotnet/sdk/issues/901, поскольку мне нужно реализовать это в большом устаревшем решении ASP.NET, где это невозможно.
Я ожидал, что добавление ссылки на Project C будет иметь небольшой эффект, кроме (как было замечено), что это приведет к тому, что в папку / bin / Debug будет скопировано гораздо больше библиотек DLL с пересылкой типов. Но я бы не ожидал, что теперь будет отсутствовать System.Data.SqlClient.
System.Data.SqlClient
NuGet также в проект A должно решить эту проблему. Для сценария 2 журналMSBuild
показывает, что он пытается разрешить эту зависимость от проектаC
, который там отсутствует, потому что проект.NET Standard
не копирует свои зависимости в папкуbin
. Для сценария 1MSBuild
разрешает его из проекта B, который завершается успешно. - person pfx   schedule 25.06.2019