В большом решении с 52 проектами (все net462) последняя версия некоторых наших зависимостей теперь построена только для стандарта NET. Поэтому они зависят от пакета NuGet NETStandard.Library
который, в свою очередь, перетаскивает многие другие версии 4.3.x пакетов System.*
Которые обычно находятся в самой.NET Framework.
В результате некоторые проекты ссылаются на System.*
Библиотеки из папки пакетов, в то время как другие ссылаются на System.*
Библиотеки из.NET Framework.
Это приводит к известной проблеме времени выполнения, fe:
Сообщение: System.IO.FileLoadException: Не удалось загрузить файл или сборку "System.Net.Http, Version = 4.1.1.2, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a" или одна из его зависимостей. Расположенное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)
Копаясь в зависимостях пакетов NETStandard.Library
, мы видим, что та же проблема существует и в этих пакетах:
- System.Collections. *
- System.ComponentModel. *
- System.Console
- System.Globalization. *
- System.IO. *
- System.Linq. *
- System.Net. *
- System.ObjectModel
- System.Reflection. *
- System.Resources.ResourceManager
- System.Runtime. *
- System.Text. *
- System.Threading. *
- System.Xml. *
Обычно это фиксируется установкой того же пакета в других проектах, но мы имеем дело с большим количеством проектов и множеством пакетов здесь, и я не хочу слепо добавлять все эти зависимости во все 52 проекта.
Это заставило меня задаться вопросом, знает ли кто-нибудь о том, как легко восстановить эту ситуацию, и чтобы все проекты ссылались на правильный пакет /DLL из папки пакетов NuGet, если они в настоящее время используют внутреннюю среду NET Framework.
Простое VS-решение для net462 и net471, демонстрирующее проблему, можно найти здесь